From 7c122cca25b701af446471c67fdcf07c2da9e318 Mon Sep 17 00:00:00 2001 From: YuQi Date: Sun, 9 Oct 2022 11:24:05 +0800 Subject: [PATCH] [bsp][c28x] add driver for GPIO and improve pwm's driver (#6493) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 增加PWM模块的配置kconfig代码 2. 调整目录结构,新增c28x文件夹,将原有tms320f28379的porting移动至c28x文件夹下,通用设备驱动移动至c28x/libraries下 3. 增加gpio驱动代码以及外部中断触发驱动代码 目前已经在tms320f28379上通过测试 --- .gitignore | 1 + .../HAL_Drivers}/config/pwm_config.h | 16 - .../libraries/HAL_Drivers}/drv_config.h | 0 bsp/c28x/libraries/HAL_Drivers/drv_gpio.c | 439 ++ bsp/c28x/libraries/HAL_Drivers/drv_gpio.h | 44 + .../libraries/HAL_Drivers}/drv_pwm.c | 193 +- .../libraries/HAL_Drivers}/drv_pwm.h | 3 +- .../libraries/HAL_Drivers}/drv_sci.c | 2 +- .../libraries/HAL_Drivers}/drv_sci.h | 0 .../common/include/F2837xD_Adc_defines.h | 0 .../common/include/F2837xD_Can_defines.h | 0 .../common/include/F2837xD_Cla_defines.h | 0 .../common/include/F2837xD_Cla_typedefs.h | 0 .../common/include/F2837xD_Dma_defines.h | 0 .../common/include/F2837xD_EPwm_defines.h | 0 .../common/include/F2837xD_Emif_defines.h | 0 .../common/include/F2837xD_Examples.h | 0 .../common/include/F2837xD_GlobalPrototypes.h | 0 .../common/include/F2837xD_Gpio_defines.h | 0 .../common/include/F2837xD_I2c_defines.h | 0 .../common/include/F2837xD_Ipc_defines.h | 0 .../common/include/F2837xD_Ipc_drivers.h | 0 .../common/include/F2837xD_Pie_defines.h | 0 .../include/F2837xD_SWPrioritizedIsrLevels.h | 0 .../common/include/F2837xD_SysCtrl_defines.h | 0 .../common/include/F2837xD_Systick_defines.h | 0 .../common/include/F2837xD_Upp_defines.h | 0 .../common/include/F2837xD_cputimervars.h | 0 .../common/include/F2837xD_defaultisr.h | 0 .../common/include/F2837xD_sci_io.h | 0 .../common/include/F2837xD_sdfm_drivers.h | 0 .../common/include/F2837xD_struct.h | 0 .../common/include/F28x_Project.h | 0 .../tms320f28379d}/common/include/device.h | 0 .../tms320f28379d}/common/include/driverlib.h | 0 .../tms320f28379d}/common/include/stdint.h | 0 .../tms320f28379d}/common/include/usb.h | 0 .../tms320f28379d}/common/include/usb_hal.h | 0 .../common/source/F2837xD_Adc.c | 0 .../common/source/F2837xD_CodeStartBranch.asm | 0 .../common/source/F2837xD_CpuTimers.c | 0 .../common/source/F2837xD_DBGIER.asm | 0 .../common/source/F2837xD_DefaultISR.c | 0 .../common/source/F2837xD_Dma.c | 0 .../common/source/F2837xD_ECap.c | 0 .../common/source/F2837xD_EPwm.c | 0 .../common/source/F2837xD_EQep.c | 0 .../common/source/F2837xD_Emif.c | 0 .../common/source/F2837xD_Gpio.c | 0 .../common/source/F2837xD_I2C.c | 0 .../common/source/F2837xD_Ipc.c | 0 .../common/source/F2837xD_Ipc_Driver.c | 0 .../common/source/F2837xD_Ipc_Driver_Lite.c | 0 .../common/source/F2837xD_Ipc_Driver_Util.c | 0 .../common/source/F2837xD_Mcbsp.c | 0 .../common/source/F2837xD_PieCtrl.c | 0 .../common/source/F2837xD_PieVect.c | 0 .../source/F2837xD_SWPrioritizedPieVect.c | 0 .../common/source/F2837xD_Sci.c | 0 .../common/source/F2837xD_Spi.c | 0 .../common/source/F2837xD_SysCtrl.c | 0 .../common/source/F2837xD_TempSensorConv.c | 0 .../common/source/F2837xD_Upp.c | 0 .../common/source/F2837xD_can.c | 0 .../common/source/F2837xD_sci_io.c | 0 .../common/source/F2837xD_sdfm_drivers.c | 0 .../common/source/F2837xD_struct.c | 0 .../common/source/F2837xD_usDelay.asm | 0 .../tms320f28379d}/common/source/device.c | 0 .../tms320f28379d}/common/source/usb.c | 0 .../tms320f28379d}/common/source/usb_hal.c | 0 .../headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd | 0 .../headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd | 0 .../cmd/F2837xD_Headers_nonBIOS_cpu1.cmd | 0 .../cmd/F2837xD_Headers_nonBIOS_cpu2.cmd | 0 .../headers/include/F2837xD_adc.h | 0 .../headers/include/F2837xD_analogsubsys.h | 0 .../headers/include/F2837xD_can.h | 0 .../headers/include/F2837xD_cla.h | 0 .../headers/include/F2837xD_cmpss.h | 0 .../headers/include/F2837xD_cputimer.h | 0 .../headers/include/F2837xD_dac.h | 0 .../headers/include/F2837xD_dcsm.h | 0 .../headers/include/F2837xD_device.h | 0 .../headers/include/F2837xD_dma.h | 0 .../headers/include/F2837xD_ecap.h | 0 .../headers/include/F2837xD_emif.h | 0 .../headers/include/F2837xD_epwm.h | 0 .../headers/include/F2837xD_epwm_xbar.h | 0 .../headers/include/F2837xD_eqep.h | 0 .../headers/include/F2837xD_flash.h | 0 .../headers/include/F2837xD_gpio.h | 0 .../headers/include/F2837xD_i2c.h | 0 .../headers/include/F2837xD_input_xbar.h | 0 .../headers/include/F2837xD_ipc.h | 0 .../headers/include/F2837xD_mcbsp.h | 0 .../headers/include/F2837xD_memconfig.h | 0 .../headers/include/F2837xD_nmiintrupt.h | 0 .../headers/include/F2837xD_output_xbar.h | 0 .../headers/include/F2837xD_piectrl.h | 0 .../headers/include/F2837xD_pievect.h | 0 .../headers/include/F2837xD_sci.h | 0 .../headers/include/F2837xD_sdfm.h | 0 .../headers/include/F2837xD_spi.h | 0 .../headers/include/F2837xD_sysctrl.h | 0 .../headers/include/F2837xD_upp.h | 0 .../headers/include/F2837xD_xbar.h | 0 .../headers/include/F2837xD_xint.h | 0 .../source/F2837xD_GlobalVariableDefs.c | 0 bsp/{ => c28x}/tms320f28379d/.ccsproject | 2 +- bsp/{ => c28x}/tms320f28379d/.config | 31 +- bsp/c28x/tms320f28379d/.cproject | 224 + bsp/c28x/tms320f28379d/.gitignore | 3 + bsp/c28x/tms320f28379d/.project | 869 +++ .../org.eclipse.cdt.codan.core.prefs | 0 .../org.eclipse.cdt.debug.core.prefs | 0 .../org.eclipse.core.resources.prefs | 49 +- .../tms320f28379d/2837x_FLASH_lnk_cpu1.cmd | 0 .../tms320f28379d/2837x_RAM_lnk_cpu1.cmd | 0 bsp/{ => c28x}/tms320f28379d/Kconfig | 3 +- bsp/{ => c28x}/tms320f28379d/README.md | 0 .../tms320f28379d/applications/startup.c | 0 bsp/c28x/tms320f28379d/board/Kconfig | 1045 +++ .../tms320f28379d/board}/board.c | 24 + .../tms320f28379d/board}/board.h | 0 .../tms320f28379d/figures/build.png | Bin .../tms320f28379d/figures/debug_as.png | Bin .../tms320f28379d/figures/import.png | Bin .../tms320f28379d/figures/import_dia.png | Bin .../tms320f28379d/figures/launch-28379d.png | Bin .../tms320f28379d/figures/launching.png | Bin bsp/{ => c28x}/tms320f28379d/rtconfig.h | 15 +- .../tms320f28379d/rtconfig_project.h | 0 .../targetConfigs/TMS320F28379D.ccxml | 0 .../tms320f28379d/targetConfigs/readme.txt | 0 bsp/stm32/stm32f103-atk-nano/.config | 63 +- bsp/stm32/stm32f103-atk-nano/rtconfig.h | 11 +- bsp/tms320f28379d/.cproject | 401 -- bsp/tms320f28379d/.gitignore | 3 - bsp/tms320f28379d/.project | 64 - .../common/cmd/2837xD_FLASH_CLA_lnk_cpu1.cmd | 178 - .../cmd/2837xD_FLASH_IQMATH_lnk_cpu1.cmd | 134 - .../common/cmd/2837xD_FLASH_SGEN_lnk_cpu1.cmd | 147 - .../common/cmd/2837xD_FLASH_TMU_lnk_cpu1.cmd | 136 - .../cmd/2837xD_FLASH_afe031_lnk_cpu1.cmd | 170 - .../common/cmd/2837xD_FLASH_lnk_cpu1.cmd | 142 - .../common/cmd/2837xD_FLASH_lnk_cpu1_far.cmd | 156 - .../common/cmd/2837xD_FLASH_lnk_cpu2.cmd | 114 - .../common/cmd/2837xD_FLASH_lnk_cpu2_far.cmd | 120 - .../common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd | 135 - .../common/cmd/2837xD_RAM_IPC_lnk_cpu1.cmd | 38 - .../common/cmd/2837xD_RAM_IPC_lnk_cpu2.cmd | 37 - .../common/cmd/2837xD_RAM_IQMATH_lnk_cpu1.cmd | 103 - .../common/cmd/2837xD_RAM_SGEN_lnk_cpu1.cmd | 106 - .../2837xD_RAM_SWPrioritizedISR_lnk_cpu1.cmd | 89 - .../common/cmd/2837xD_RAM_TMU_lnk_cpu1.cmd | 97 - .../common/cmd/2837xD_RAM_afe031_lnk_cpu1.cmd | 99 - .../common/cmd/2837xD_RAM_lnk_cpu1.cmd | 103 - .../common/cmd/2837xD_RAM_lnk_cpu1_USB.cmd | 97 - .../common/cmd/2837xD_RAM_lnk_cpu1_far.cmd | 121 - .../common/cmd/2837xD_RAM_lnk_cpu2.cmd | 75 - .../common/cmd/2837xD_RAM_lnk_cpu2_far.cmd | 83 - .../common/cmd/2837xD_RAM_lnk_shared_cpu1.cmd | 92 - .../common/cmd/2837xD_RAM_lnk_shared_cpu2.cmd | 92 - .../common/cmd/2837xD_dcsm_lnk_cpu1.cmd | 68 - .../common/cmd/2837xD_dcsm_lnk_cpu2.cmd | 44 - .../deprecated/Deprecated_F2837xD_DRL_UG.pdf | Bin 348054 -> 0 bytes .../common/deprecated/driverlib/can.c | 1919 ------ .../common/deprecated/driverlib/can.h | 415 -- .../common/deprecated/driverlib/debug.h | 75 - .../common/deprecated/driverlib/interrupt.c | 411 -- .../common/deprecated/driverlib/interrupt.h | 81 - .../common/deprecated/driverlib/rom.h | 44 - .../common/deprecated/driverlib/rom_map.h | 5082 --------------- .../deprecated/driverlib/rtos_bindings.h | 107 - .../common/deprecated/driverlib/sysctl.c | 841 --- .../common/deprecated/driverlib/sysctl.h | 283 - .../common/deprecated/driverlib/systick.c | 305 - .../common/deprecated/driverlib/systick.h | 84 - .../common/deprecated/driverlib/uart.c | 1352 ---- .../common/deprecated/driverlib/uart.h | 214 - .../libraries/common/deprecated/inc/hw_adc.h | 1227 ---- .../libraries/common/deprecated/inc/hw_can.h | 612 -- .../common/deprecated/inc/hw_cmpss.h | 295 - .../common/deprecated/inc/hw_cputimer.h | 125 - .../libraries/common/deprecated/inc/hw_ecap.h | 220 - .../libraries/common/deprecated/inc/hw_emif.h | 372 -- .../libraries/common/deprecated/inc/hw_epwm.h | 1248 ---- .../libraries/common/deprecated/inc/hw_eqep.h | 391 -- .../libraries/common/deprecated/inc/hw_gpio.h | 5662 ----------------- .../libraries/common/deprecated/inc/hw_i2c.h | 244 - .../libraries/common/deprecated/inc/hw_ints.h | 299 - .../common/deprecated/inc/hw_memmap.h | 96 - .../common/deprecated/inc/hw_types.h | 88 - .../libraries/common/deprecated/inc/hw_uart.h | 208 - .../libraries/common/deprecated/inc/hw_usb.h | 4611 -------------- .../common/deprecated/utils/cmdline.c | 214 - .../common/deprecated/utils/cmdline.h | 143 - .../common/deprecated/utils/uartstdio.c | 1773 ------ .../common/deprecated/utils/uartstdio.h | 107 - .../common/deprecated/utils/ustdlib.c | 1853 ------ .../common/deprecated/utils/ustdlib.h | 96 - .../common/targetConfigs/TMS320F28377D.ccxml | 22 - .../common/targetConfigs/TMS320F28379D.ccxml | 22 - 204 files changed, 2884 insertions(+), 34538 deletions(-) rename bsp/{tms320f28379d/drivers => c28x/libraries/HAL_Drivers}/config/pwm_config.h (81%) rename bsp/{tms320f28379d/drivers => c28x/libraries/HAL_Drivers}/drv_config.h (100%) create mode 100644 bsp/c28x/libraries/HAL_Drivers/drv_gpio.c create mode 100644 bsp/c28x/libraries/HAL_Drivers/drv_gpio.h rename bsp/{tms320f28379d/drivers => c28x/libraries/HAL_Drivers}/drv_pwm.c (63%) rename bsp/{tms320f28379d/drivers => c28x/libraries/HAL_Drivers}/drv_pwm.h (90%) rename bsp/{tms320f28379d/drivers => c28x/libraries/HAL_Drivers}/drv_sci.c (99%) rename bsp/{tms320f28379d/drivers => c28x/libraries/HAL_Drivers}/drv_sci.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Adc_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Can_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Cla_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Cla_typedefs.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Dma_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_EPwm_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Emif_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Examples.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_GlobalPrototypes.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Gpio_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_I2c_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Ipc_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Ipc_drivers.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Pie_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_SWPrioritizedIsrLevels.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_SysCtrl_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Systick_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_Upp_defines.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_cputimervars.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_defaultisr.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_sci_io.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_sdfm_drivers.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F2837xD_struct.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/F28x_Project.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/device.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/driverlib.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/stdint.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/usb.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/include/usb_hal.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Adc.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_CodeStartBranch.asm (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_CpuTimers.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_DBGIER.asm (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_DefaultISR.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Dma.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_ECap.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_EPwm.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_EQep.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Emif.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Gpio.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_I2C.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Ipc.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Ipc_Driver.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Ipc_Driver_Lite.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Ipc_Driver_Util.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Mcbsp.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_PieCtrl.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_PieVect.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_SWPrioritizedPieVect.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Sci.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Spi.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_SysCtrl.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_TempSensorConv.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_Upp.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_can.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_sci_io.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_sdfm_drivers.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_struct.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/F2837xD_usDelay.asm (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/device.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/usb.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/common/source/usb_hal.c (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_adc.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_analogsubsys.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_can.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_cla.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_cmpss.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_cputimer.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_dac.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_dcsm.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_device.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_dma.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_ecap.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_emif.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_epwm.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_epwm_xbar.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_eqep.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_flash.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_gpio.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_i2c.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_input_xbar.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_ipc.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_mcbsp.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_memconfig.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_nmiintrupt.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_output_xbar.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_piectrl.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_pievect.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_sci.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_sdfm.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_spi.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_sysctrl.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_upp.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_xbar.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/include/F2837xD_xint.h (100%) rename bsp/{tms320f28379d/libraries => c28x/libraries/tms320f28379d}/headers/source/F2837xD_GlobalVariableDefs.c (100%) rename bsp/{ => c28x}/tms320f28379d/.ccsproject (95%) rename bsp/{ => c28x}/tms320f28379d/.config (97%) create mode 100644 bsp/c28x/tms320f28379d/.cproject create mode 100644 bsp/c28x/tms320f28379d/.gitignore create mode 100644 bsp/c28x/tms320f28379d/.project rename bsp/{ => c28x}/tms320f28379d/.settings/org.eclipse.cdt.codan.core.prefs (100%) rename bsp/{ => c28x}/tms320f28379d/.settings/org.eclipse.cdt.debug.core.prefs (100%) rename bsp/{ => c28x}/tms320f28379d/.settings/org.eclipse.core.resources.prefs (55%) rename bsp/{ => c28x}/tms320f28379d/2837x_FLASH_lnk_cpu1.cmd (100%) rename bsp/{ => c28x}/tms320f28379d/2837x_RAM_lnk_cpu1.cmd (100%) rename bsp/{ => c28x}/tms320f28379d/Kconfig (92%) rename bsp/{ => c28x}/tms320f28379d/README.md (100%) rename bsp/{ => c28x}/tms320f28379d/applications/startup.c (100%) create mode 100644 bsp/c28x/tms320f28379d/board/Kconfig rename bsp/{tms320f28379d/drivers => c28x/tms320f28379d/board}/board.c (84%) rename bsp/{tms320f28379d/drivers => c28x/tms320f28379d/board}/board.h (100%) rename bsp/{ => c28x}/tms320f28379d/figures/build.png (100%) rename bsp/{ => c28x}/tms320f28379d/figures/debug_as.png (100%) rename bsp/{ => c28x}/tms320f28379d/figures/import.png (100%) rename bsp/{ => c28x}/tms320f28379d/figures/import_dia.png (100%) rename bsp/{ => c28x}/tms320f28379d/figures/launch-28379d.png (100%) rename bsp/{ => c28x}/tms320f28379d/figures/launching.png (100%) rename bsp/{ => c28x}/tms320f28379d/rtconfig.h (93%) rename bsp/{ => c28x}/tms320f28379d/rtconfig_project.h (100%) rename bsp/{ => c28x}/tms320f28379d/targetConfigs/TMS320F28379D.ccxml (100%) rename bsp/{ => c28x}/tms320f28379d/targetConfigs/readme.txt (100%) delete mode 100644 bsp/tms320f28379d/.cproject delete mode 100644 bsp/tms320f28379d/.gitignore delete mode 100644 bsp/tms320f28379d/.project delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_CLA_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_IQMATH_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_SGEN_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_TMU_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_afe031_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1_far.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2_far.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu2.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IQMATH_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SGEN_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SWPrioritizedISR_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_TMU_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_afe031_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_USB.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_far.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2_far.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu2.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu1.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu2.cmd delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/Deprecated_F2837xD_DRL_UG.pdf delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/debug.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom_map.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/rtos_bindings.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_adc.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_can.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cmpss.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cputimer.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ecap.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_emif.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_epwm.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_eqep.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_gpio.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_i2c.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ints.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_memmap.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_types.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_uart.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/inc/hw_usb.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.h delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.c delete mode 100644 bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.h delete mode 100644 bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28377D.ccxml delete mode 100644 bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28379D.ccxml diff --git a/.gitignore b/.gitignore index f08897fb2d..ce663a867d 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ tags .history CMakeLists.txt cmake-build-debug +*.mk diff --git a/bsp/tms320f28379d/drivers/config/pwm_config.h b/bsp/c28x/libraries/HAL_Drivers/config/pwm_config.h similarity index 81% rename from bsp/tms320f28379d/drivers/config/pwm_config.h rename to bsp/c28x/libraries/HAL_Drivers/config/pwm_config.h index 90b0b0bc63..d490cb4d71 100644 --- a/bsp/tms320f28379d/drivers/config/pwm_config.h +++ b/bsp/c28x/libraries/HAL_Drivers/config/pwm_config.h @@ -15,10 +15,6 @@ #include "rtthread.h" #include "drv_config.h" -#define BSP_USING_PWM1 -#define BSP_USING_PWM2 -#define BSP_USING_PWM3 -#define BSP_USING_PWM4 #ifdef __cplusplus extern "C" { #endif @@ -58,18 +54,6 @@ extern "C" { } #endif #endif -#define EPWM1_MAX_DB 0x03FF -#define EPWM2_MAX_DB 0x03FF -#define EPWM3_MAX_DB 0x03FF -#define EPWM1_MIN_DB 0 -#define EPWM2_MIN_DB 0 -#define EPWM3_MIN_DB 0 -#define DB_UP 1 -#define DB_DOWN 0 - -#define RT_HSPCLKDIV TB_DIV4 -#define RT_CLKDIV TB_DIV4 -#define RT_CTRMODE TB_COUNT_UPDOWN #define TZ_OFF 2 #define TZ_ON 1 diff --git a/bsp/tms320f28379d/drivers/drv_config.h b/bsp/c28x/libraries/HAL_Drivers/drv_config.h similarity index 100% rename from bsp/tms320f28379d/drivers/drv_config.h rename to bsp/c28x/libraries/HAL_Drivers/drv_config.h diff --git a/bsp/c28x/libraries/HAL_Drivers/drv_gpio.c b/bsp/c28x/libraries/HAL_Drivers/drv_gpio.c new file mode 100644 index 0000000000..89d5931799 --- /dev/null +++ b/bsp/c28x/libraries/HAL_Drivers/drv_gpio.c @@ -0,0 +1,439 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-08-28 qiyu first version + */ +#include +#include "drv_gpio.h" +#include "F2837xD_device.h" +#include "F28x_Project.h" // Device Headerfile and Examples Include File +#ifdef RT_USING_PIN + +// the gpio pin number for each port is 32, while it is 16 for ARM +#define PIN_NUM(port, no) (((((port) & 0xFu) << 5) | ((no) & 0x1F))) +#define PIN_PORT(pin) ((rt_uint16_t)(((pin) >> 5) & 0xFu)) +#define PIN_NO(pin) ((rt_uint16_t)((pin) & 0x1Fu)) + +#define PIN_c28x_PORT(pin) (volatile Uint32 *)&GpioDataRegs + (PIN_PORT(pin))*GPY_DATA_OFFSET +#define PIN_c28x_PIN(pin) ((rt_uint32_t)(1u << PIN_NO(pin))) + +#define PIN_c28x_PORT_MAX 6 /* gpioA to GPIOF in total*/ +#define PIN_IRQ_MAX 5 /* XINT1 to XINT5 in total */ + +static rt_err_t c28x_pin_attach_irq(struct rt_device *device, rt_int32_t pin, + rt_uint32_t mode, void (*hdr)(void *args), void *args); +static rt_err_t c28x_pin_dettach_irq(struct rt_device *device, rt_int32_t pin); +static rt_err_t c28x_pin_irq_enable(struct rt_device *device, rt_base_t pin, + rt_uint32_t enabled); + +static rt_base_t c28x_pin_get(const char *name) +{ + int hw_pin_num = 0; + int i, name_len; + + name_len = rt_strlen(name); + + if ((name_len < 3) || (name_len >= 7)) + { + return -RT_EINVAL; + } + /* + * PX.y + */ + if ((name[0] != 'P') || (name[2] != '.')) + { + return -RT_EINVAL; + } + + for (i = 3; i < name_len; i++) + { + hw_pin_num *= 10; + hw_pin_num += name[i] - '0'; + } + return hw_pin_num; +} + +static void c28x_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value) +{ + volatile Uint32 *gpioDataReg; + Uint32 pinMask; + if (PIN_PORT(pin) < PIN_c28x_PORT_MAX) + { + gpioDataReg = PIN_c28x_PORT(pin); + pinMask = 1UL << (PIN_NO(pin)); + if (value == 0) + { + gpioDataReg[GPYCLEAR] = pinMask; + } + else + { + gpioDataReg[GPYSET] = pinMask; + } + } +} + +static int c28x_pin_read(rt_device_t dev, rt_base_t pin) +{ + volatile Uint32 *gpioDataReg; + int value = PIN_LOW; + + if (PIN_PORT(pin) < PIN_c28x_PORT_MAX) + { + gpioDataReg = PIN_c28x_PORT(pin); + value = (gpioDataReg[GPYDAT] >> PIN_NO(pin)) & 0x1; + } + + return value; +} + +static void c28x_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) +{ + volatile Uint32 *gpioBaseAddr; + volatile Uint32 *dir, *pud, *odr; + if (PIN_PORT(pin) >= PIN_c28x_PORT_MAX) + { + return; + } + rt_uint32_t pinMask; + pinMask = 1UL << PIN_NO(pin); + gpioBaseAddr = (Uint32 *)&GpioCtrlRegs + (PIN_PORT(pin))*GPY_CTRL_OFFSET; + + dir = gpioBaseAddr + GPYDIR; + pud = gpioBaseAddr + GPYPUD; + odr = gpioBaseAddr + GPYODR; + + EALLOW; + if (mode == PIN_MODE_OUTPUT) + { + *dir |= pinMask; + } + else if (mode == PIN_MODE_INPUT) + { + *dir &= ~pinMask; + } + else if (mode == PIN_MODE_INPUT_PULLUP) + { + *dir &= ~pinMask; + *pud &= ~pinMask; + } + else if (mode == PIN_MODE_INPUT_PULLDOWN) + { + /* input setting: pull down. */ + *dir &= ~pinMask; + *pud |= pinMask; + } + else if (mode == PIN_MODE_OUTPUT_OD) + { + /* output setting: od. */ + *dir |= pinMask; + *odr |= pinMask; + } + EDIS; +} + +const static struct rt_pin_ops _c28x_pin_ops = +{ + c28x_pin_mode, + c28x_pin_write, + c28x_pin_read, + c28x_pin_attach_irq, + c28x_pin_dettach_irq, + c28x_pin_irq_enable, + c28x_pin_get, +}; + +int rt_hw_pin_init(void) +{ + return rt_device_pin_register("pin", &_c28x_pin_ops, RT_NULL); +} + +static struct rt_pin_irq_hdr pin_irq_hdr_tab[] = +{ + {-1, 0, RT_NULL, RT_NULL}, + {-1, 0, RT_NULL, RT_NULL}, + {-1, 0, RT_NULL, RT_NULL}, + {-1, 0, RT_NULL, RT_NULL}, + {-1, 0, RT_NULL, RT_NULL}, +}; + +static rt_int16_t pin_irq_xint_tab[] = +{ + BSP_XINT1_PIN, + BSP_XINT2_PIN, + BSP_XINT3_PIN, + BSP_XINT4_PIN, + BSP_XINT5_PIN +}; +rt_inline rt_int32_t get_irq_index(rt_uint32_t pin) +{ + int i; + for(i = 0 ; i < PIN_IRQ_MAX ; i++) + { + if(pin_irq_xint_tab[i] == pin) + { + return i; + } + } + return -1; +} + +#define ITEM_NUM(items) sizeof(items) / sizeof(items[0]) + +static rt_err_t c28x_pin_attach_irq(struct rt_device *device, rt_int32_t pin, + rt_uint32_t mode, void (*hdr)(void *args), void *args) +{ + rt_base_t level; + rt_int32_t irqindex = -1; + + if (PIN_PORT(pin) >= PIN_c28x_PORT_MAX) + { + return -RT_ENOSYS; + } + irqindex = get_irq_index(pin); + level = rt_hw_interrupt_disable(); + if (pin_irq_hdr_tab[irqindex].pin == pin && + pin_irq_hdr_tab[irqindex].hdr == hdr && + pin_irq_hdr_tab[irqindex].mode == mode && + pin_irq_hdr_tab[irqindex].args == args) + { + rt_hw_interrupt_enable(level); + return RT_EOK; + } + if (pin_irq_hdr_tab[irqindex].pin != -1) + { + rt_hw_interrupt_enable(level); + return -RT_EBUSY; + } + pin_irq_hdr_tab[irqindex].pin = pin; + pin_irq_hdr_tab[irqindex].hdr = hdr; + pin_irq_hdr_tab[irqindex].mode = mode; + pin_irq_hdr_tab[irqindex].args = args; + rt_hw_interrupt_enable(level); + + return RT_EOK; +} + +static rt_err_t c28x_pin_dettach_irq(struct rt_device *device, rt_int32_t pin) +{ + rt_base_t level; + rt_int32_t irqindex = -1; + rt_uint16_t i; + if (PIN_PORT(pin) >= PIN_c28x_PORT_MAX) + { + return -RT_ENOSYS; + } + + for(i = 0 ; i < PIN_IRQ_MAX ; i++) + { + if(pin_irq_hdr_tab[i].pin == pin) + { + irqindex = i; + break; + } + } + if (irqindex == -1) + { + return -RT_ENOSYS; + } + level = rt_hw_interrupt_disable(); + pin_irq_hdr_tab[irqindex].pin = -1; + pin_irq_hdr_tab[irqindex].hdr = RT_NULL; + pin_irq_hdr_tab[irqindex].mode = 0; + pin_irq_hdr_tab[irqindex].args = RT_NULL; + rt_hw_interrupt_enable(level); + + return RT_EOK; +} + +static rt_err_t c28x_pin_irq_enable(struct rt_device *device, rt_base_t pin, + rt_uint32_t enabled) +{ + rt_base_t level; + rt_int32_t irqindex = -1; + rt_uint16_t channel; + rt_uint16_t edge_mode,pin_mode; + + if (PIN_PORT(pin) >= PIN_c28x_PORT_MAX) + { + return -RT_ENOSYS; + } + + irqindex = get_irq_index(pin); + + /* irqindex+1 = channel*/ + if (irqindex < 0 || irqindex >= PIN_IRQ_MAX) + { + return -RT_ENOSYS; + } + + if (enabled == PIN_IRQ_ENABLE) + { + level = rt_hw_interrupt_disable(); + + if (pin_irq_hdr_tab[irqindex].pin == -1) + { + rt_hw_interrupt_enable(level); + return -RT_ENOSYS; + } + + /* + * 1. set the edge mode of interrupt triggering + * 2. set the GPIO mode + * 3. enable XINT channel and set the input source + */ + channel = irqindex+1; + switch (pin_irq_hdr_tab[irqindex].mode) + { + case PIN_IRQ_MODE_RISING: + edge_mode = 1; + pin_mode = PIN_MODE_INPUT_PULLDOWN; + break; + case PIN_IRQ_MODE_FALLING: + edge_mode = 0; + pin_mode = PIN_MODE_INPUT_PULLUP; + break; + case PIN_IRQ_MODE_RISING_FALLING: + edge_mode = 3; + pin_mode = PIN_MODE_INPUT; + break; + } + if(channel == 1) + { + XintRegs.XINT1CR.bit.ENABLE = 1; // Enable XINT1 + EALLOW; + InputXbarRegs.INPUT4SELECT = pin; //Set XINT1 source to GPIO-pin + EDIS; + XintRegs.XINT1CR.bit.POLARITY = edge_mode; // Falling edge interrupt + } + else if(channel == 2) + { + XintRegs.XINT2CR.bit.ENABLE = 1; // Enable XINT2 + EALLOW; + InputXbarRegs.INPUT5SELECT = pin; //Set XINT1 source to GPIO-pin + EDIS; + XintRegs.XINT2CR.bit.POLARITY = edge_mode; // Falling edge interrupt + } + else if(channel == 3) + { + XintRegs.XINT3CR.bit.ENABLE = 1; // Enable XINT2 + EALLOW; + InputXbarRegs.INPUT6SELECT = pin; //Set XINT1 source to GPIO-pin + EDIS; + XintRegs.XINT3CR.bit.POLARITY = edge_mode; // Falling edge interrupt + } + else if(channel == 4) + { + XintRegs.XINT4CR.bit.ENABLE = 1; // Enable XINT2 + EALLOW; + InputXbarRegs.INPUT13SELECT = pin; //Set XINT1 source to GPIO-pin + EDIS; + XintRegs.XINT4CR.bit.POLARITY = edge_mode; // Falling edge interrupt + } + else if(channel == 5) + { + XintRegs.XINT5CR.bit.ENABLE = 1; // Enable XINT2 + EALLOW; + InputXbarRegs.INPUT14SELECT = pin; //Set XINT1 source to GPIO-pin + EDIS; + XintRegs.XINT5CR.bit.POLARITY = edge_mode; // Falling edge interrupt + } + + c28x_pin_mode(device, pin, pin_mode); + rt_hw_interrupt_enable(level); + } + else if (enabled == PIN_IRQ_DISABLE) + { + level = rt_hw_interrupt_disable(); + channel = irqindex+1; + /* + * TODO modify this simpler + */ + if(channel == 1) + { + XintRegs.XINT1CR.bit.ENABLE = 0; // Disable XINT1 + } + else if(channel == 2) + { + XintRegs.XINT2CR.bit.ENABLE = 0; // Disable XINT2 + } + else if(channel == 3) + { + XintRegs.XINT3CR.bit.ENABLE = 0; // Disable XINT2 + } + else if(channel == 4) + { + XintRegs.XINT4CR.bit.ENABLE = 0; // Disable XINT2 + } + else if(channel == 5) + { + XintRegs.XINT5CR.bit.ENABLE = 0; // Disable XINT2 + } + rt_hw_interrupt_enable(level); + } + else + { + return -RT_ENOSYS; + } + + return RT_EOK; +} + +void GPIO_XINT_Callback(rt_int16_t XINT_number); + +interrupt void XINT1_Handler(void) +{ + rt_interrupt_enter(); + PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + GPIO_XINT_Callback(1); + rt_interrupt_leave(); +} + +interrupt void XINT2_Handler(void) +{ + rt_interrupt_enter(); + GPIO_XINT_Callback(2); + PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + rt_interrupt_leave(); +} + +interrupt void XINT3_Handler(void) +{ + rt_interrupt_enter(); + GPIO_XINT_Callback(3); + PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + rt_interrupt_leave(); +} + +interrupt void XINT4_Handler(void) +{ + rt_interrupt_enter(); + GPIO_XINT_Callback(4); + PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + rt_interrupt_leave(); +} + +interrupt void XINT5_Handler(void) +{ + rt_interrupt_enter(); + GPIO_XINT_Callback(5); + PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + rt_interrupt_leave(); +} + +void GPIO_XINT_Callback(rt_int16_t XINT_number) +{ + rt_int32_t irqindex = XINT_number - 1; + if(pin_irq_hdr_tab[irqindex].hdr) + { + pin_irq_hdr_tab[irqindex].hdr(pin_irq_hdr_tab[irqindex].args); + } +} + +#endif /* RT_USING_PIN */ + + + diff --git a/bsp/c28x/libraries/HAL_Drivers/drv_gpio.h b/bsp/c28x/libraries/HAL_Drivers/drv_gpio.h new file mode 100644 index 0000000000..ceb1cc1cfa --- /dev/null +++ b/bsp/c28x/libraries/HAL_Drivers/drv_gpio.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-08-28 qiyu first version + */ + +#ifndef DRIVERS_DRV_GPIO_H_ +#define DRIVERS_DRV_GPIO_H_ + +#include +#include "rtdevice.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int rt_hw_pin_init(void); + +#ifndef BSP_XINT1_PIN +#define BSP_XINT1_PIN -1 +#endif +#ifndef BSP_XINT2_PIN +#define BSP_XINT2_PIN -1 +#endif +#ifndef BSP_XINT3_PIN +#define BSP_XINT3_PIN -1 +#endif +#ifndef BSP_XINT4_PIN +#define BSP_XINT4_PIN -1 +#endif +#ifndef BSP_XINT5_PIN +#define BSP_XINT5_PIN -1 +#endif + +#ifdef __cplusplus +} +#endif + + +#endif /* DRIVERS_DRV_GPIO_H_ */ diff --git a/bsp/tms320f28379d/drivers/drv_pwm.c b/bsp/c28x/libraries/HAL_Drivers/drv_pwm.c similarity index 63% rename from bsp/tms320f28379d/drivers/drv_pwm.c rename to bsp/c28x/libraries/HAL_Drivers/drv_pwm.c index 4db7f6b079..336e7f6e57 100644 --- a/bsp/tms320f28379d/drivers/drv_pwm.c +++ b/bsp/c28x/libraries/HAL_Drivers/drv_pwm.c @@ -17,7 +17,7 @@ /* * for now, cpu rate is a fixed value, waiting to be modified to an auto-ajustable variable. */ - +#ifdef BSP_USING_PWM rt_err_t rt_device_pwm_register(struct rt_device_pwm *device, const char *name, const struct rt_pwm_ops *ops, const void *user_data); #define CPU_FREQUENCY 200e6 @@ -120,8 +120,6 @@ static rt_err_t drv_pwm_set(volatile struct EPWM_REGS *epwm,struct rt_pwm_config { return -RT_ERROR; } - - /* * TODO Unknown problem * the clock division configuration of PWM module is 1 @@ -136,13 +134,8 @@ static rt_err_t drv_pwm_set(volatile struct EPWM_REGS *epwm,struct rt_pwm_config epwm->TBPRD = prd; /* Set timer period*/ epwm->TBCTR = 0x0000; /* Clear counter*/ - epwm->TBCTL.bit.CTRMODE = RT_CTRMODE; /* Count up*/ - epwm->TBCTL.bit.HSPCLKDIV = TB_DIV1; /* Clock ratio to SYSCLKOUT*/ - epwm->TBCTL.bit.CLKDIV = TB_DIV1; epwm->CMPCTL.bit.SHDWAMODE = RT_SHADOW_MODE; /* Load registers every ZERO*/ epwm->CMPCTL.bit.SHDWBMODE = RT_SHADOW_MODE; - epwm->CMPCTL.bit.LOADAMODE = RT_LOAD_TIME; - epwm->CMPCTL.bit.LOADBMODE = RT_LOAD_TIME; /* Setup compare */ if(configuration->channel == CHANNEL_A) { @@ -180,9 +173,7 @@ static rt_err_t drv_pwm_set(volatile struct EPWM_REGS *epwm,struct rt_pwm_config epwm->DBCTL.bit.IN_MODE = DBA_ALL; /* if disable dead time, set dead_time to 0 */ - epwm->ETSEL.bit.INTSEL = ET_CTR_ZERO; /* Select INT on Zero event */ - epwm->ETPS.bit.INTPRD = ET_1ST; /* Generate INT on 1st event */ - +#ifdef BSP_PWM1_CTR_MODE_UPDOWN if(phase<180) { epwm->TBPHS.bit.TBPHS = prd * phase/180; @@ -192,6 +183,7 @@ static rt_err_t drv_pwm_set(volatile struct EPWM_REGS *epwm,struct rt_pwm_config epwm->TBPHS.bit.TBPHS = prd-prd * (phase-180)/180; epwm->TBCTL.bit.PHSDIR = 1; /* count up*/ } +#endif if(epwm == &EPwm1Regs) { epwm->TBCTL.bit.PHSEN = TB_DISABLE; /* Disable phase loading */ @@ -374,52 +366,168 @@ static void pwm_isr(struct rt_device_pwm *rt_pwm) rt_interrupt_leave(); \ } -#ifdef BSP_USING_PWM1 +#ifdef BSP_PWM1_IT_ENABLE EPWM_ISR_DEFINE(1) +void EPWM1_Isr(); +#endif +#ifdef BSP_PWM2_IT_ENABLE +EPWM_ISR_DEFINE(2) +void EPWM2_Isr(); +#endif +#ifdef BSP_PWM3_IT_ENABLE +EPWM_ISR_DEFINE(3) +void EPWM3_Isr(); +#endif +#ifdef BSP_PWM4_IT_ENABLE +EPWM_ISR_DEFINE(4) +void EPWM4_Isr(); #endif -void EPWM1_Isr(); static int c28x_hw_pwm_init(struct c28x_pwm *device) { - EALLOW; - /* Assigning ISR to PIE */ - PieVectTable.EPWM1_INT = &EPWM1_Isr; - /* ENABLE Interrupt */ - EDIS; IER |= M_INT3; rt_err_t result = 0; - EALLOW; #ifdef BSP_USING_PWM1 - GpioCtrlRegs.GPAPUD.all |= 5<<(1-1)*4; /* Disable pull-up on GPIO0 (EPWM1A) */ - GpioCtrlRegs.GPAMUX1.all|= 5<<(1-1)*4; /* Configure GPIO0 as EPWM1A */ + GpioCtrlRegs.GPAPUD.all |= 5<<(1-1)*4; /* Disable pull-up(EPWM1A) */ + GpioCtrlRegs.GPAMUX1.all|= 5<<(1-1)*4; /* Configure as EPWM1A */ EPwm1Regs.TZCTL.bit.TZA = TZ_OFF; /* diable A when trip zone */ EPwm1Regs.TZCTL.bit.TZB = TZ_OFF; /* diable B when trip zone */ + EPwm1Regs.TBCTL.bit.CTRMODE = BSP_PWM1_CTRMODE; + EPwm1Regs.TBCTL.bit.HSPCLKDIV = BSP_PWM1_HSPCLKDIV; /* Clock ratio to SYSCLKOUT*/ + EPwm1Regs.TBCTL.bit.CLKDIV = BSP_PWM1_CLKDIV; + EPwm1Regs.CMPCTL.bit.LOADAMODE = BSP_PWM1_LOADAMODE; + EPwm1Regs.CMPCTL.bit.LOADBMODE = BSP_PWM1_LOADAMODE; + #ifdef BSP_PWM1_IT_ENABLE + EPwm1Regs.ETSEL.bit.INTEN = 1; /* Enable INT */ + EPwm1Regs.ETSEL.bit.INTSEL = BSP_PWM1_INTSEL; + EPwm1Regs.ETPS.bit.INTPRD = BSP_PWM1_INTPRD; + /* Assigning ISR to PIE */ + PieVectTable.EPWM1_INT = &EPWM1_Isr; + /* ENABLE Interrupt */ + #else + EPwm1Regs.ETSEL.bit.INTEN = 0; /* Disable INT */ + #endif + #ifdef BSP_PWM1_ADC_TRIGGER + EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group + EPwm1Regs.ETSEL.bit.SOCASEL = BSP_PWM1_SOCASEL; // Select SOC from zero + EPwm1Regs.ETPS.bit.SOCAPRD = BSP_PWM1_SOCAPRD; // Generate pulse on 1st event + #else + EPwm1Regs.ETSEL.bit.SOCAEN = 0; // Disable SOC on A group + #endif + #ifdef BSP_PWM1_MASTER + EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; /* Disable phase loading */ + EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; + #else + EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; /* Disable phase loading */ + EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; + #endif #endif #ifdef BSP_USING_PWM2 - GpioCtrlRegs.GPAPUD.all |= 5<<(2-1)*4; /* Disable pull-up on GPIO0 (EPWM1A) */ - GpioCtrlRegs.GPAMUX1.all|= 5<<(2-1)*4; /* Configure GPIO0 as EPWM1A */ + GpioCtrlRegs.GPAPUD.all |= 5<<(2-1)*4; /* Disable pull-up on (EPWM2A) */ + GpioCtrlRegs.GPAMUX1.all|= 5<<(2-1)*4; /* Configure as EPWM2A */ EPwm2Regs.TZCTL.bit.TZA = TZ_OFF; /* diable A when trip zone */ EPwm2Regs.TZCTL.bit.TZB = TZ_OFF; /* diable B when trip zone */ + EPwm2Regs.TBCTL.bit.CTRMODE = BSP_PWM2_CTRMODE; + EPwm2Regs.TBCTL.bit.HSPCLKDIV = BSP_PWM2_HSPCLKDIV; /* Clock ratio to SYSCLKOUT*/ + EPwm2Regs.TBCTL.bit.CLKDIV = BSP_PWM2_CLKDIV; + EPwm2Regs.CMPCTL.bit.LOADAMODE = BSP_PWM2_LOADAMODE; + EPwm2Regs.CMPCTL.bit.LOADBMODE = BSP_PWM2_LOADAMODE; + #ifdef BSP_PWM2_IT_ENABLE + EPwm2Regs.ETSEL.bit.INTEN = 1; /* Enable INT */ + EPwm2Regs.ETSEL.bit.INTSEL = BSP_PWM2_INTSEL; + EPwm2Regs.ETPS.bit.INTPRD = BSP_PWM2_INTPRD; + /* Assigning ISR to PIE */ + PieVectTable.EPWM2_INT = &EPWM2_Isr; + /* ENABLE Interrupt */ + #else + EPwm2Regs.ETSEL.bit.INTEN = 0; /* Disable INT */ + #endif + #ifdef BSP_PWM2_ADC_TRIGGER + EPwm2Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group + EPwm2Regs.ETSEL.bit.SOCASEL = BSP_PWM2_SOCASEL; // Select SOC from zero + EPwm2Regs.ETPS.bit.SOCAPRD = BSP_PWM2_SOCAPRD; // Generate pulse on 1st event + #else + EPwm2Regs.ETSEL.bit.SOCAEN = 0; // Disable SOC on A group + #endif + #ifdef BSP_PWM2_MASTER + EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; /* Disable phase loading */ + EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; + #else + EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; /* Disable phase loading */ + EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; + #endif #endif #ifdef BSP_USING_PWM3 - GpioCtrlRegs.GPAPUD.all |= 5<<(3-1)*4; /* Disable pull-up on GPIO0 (EPWM1A) */ - GpioCtrlRegs.GPAMUX1.all|= 5<<(3-1)*4; /* Configure GPIO0 as EPWM1A */ + GpioCtrlRegs.GPAPUD.all |= 5<<(3-1)*4; /* Disable pull-up on (EPWM3A) */ + GpioCtrlRegs.GPAMUX1.all|= 5<<(3-1)*4; /* Configure as EPWM3A */ EPwm3Regs.TZCTL.bit.TZA = TZ_OFF; /* diable A when trip zone */ EPwm3Regs.TZCTL.bit.TZB = TZ_OFF; /* diable B when trip zone */ + EPwm3Regs.TBCTL.bit.CTRMODE = BSP_PWM3_CTRMODE; + EPwm3Regs.TBCTL.bit.HSPCLKDIV = BSP_PWM3_HSPCLKDIV; /* Clock ratio to SYSCLKOUT*/ + EPwm3Regs.TBCTL.bit.CLKDIV = BSP_PWM3_CLKDIV; + EPwm3Regs.CMPCTL.bit.LOADAMODE = BSP_PWM3_LOADAMODE; + EPwm3Regs.CMPCTL.bit.LOADBMODE = BSP_PWM3_LOADAMODE; + #ifdef BSP_PWM3_IT_ENABLE + EPwm3Regs.ETSEL.bit.INTEN = 1; /* Enable INT */ + EPwm3Regs.ETSEL.bit.INTSEL = BSP_PWM3_INTSEL; + EPwm3Regs.ETPS.bit.INTPRD = BSP_PWM3_INTPRD; + /* Assigning ISR to PIE */ + PieVectTable.EPWM3_INT = &EPWM3_Isr; + /* ENABLE Interrupt */ + #else + EPwm3Regs.ETSEL.bit.INTEN = 0; /* Disable INT */ + #endif + #ifdef BSP_PWM3_ADC_TRIGGER + EPwm3Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group + EPwm3Regs.ETSEL.bit.SOCASEL = BSP_PWM3_SOCASEL; // Select SOC from zero + EPwm3Regs.ETPS.bit.SOCAPRD = BSP_PWM3_SOCAPRD; // Generate pulse on 1st event + #else + EPwm3Regs.ETSEL.bit.SOCAEN = 0; // Disable SOC on A group + #endif + #ifdef BSP_PWM3_MASTER + EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; /* Disable phase loading */ + EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; + #else + EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; /* Disable phase loading */ + EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; + #endif #endif #ifdef BSP_USING_PWM4 - GpioCtrlRegs.GPAPUD.all |= 5<<(4-1)*4; /* Disable pull-up on GPIO0 (EPWM1A) */ - GpioCtrlRegs.GPAMUX1.all|= 5<<(4-1)*4; /* Configure GPIO0 as EPWM1A */ + GpioCtrlRegs.GPAPUD.all |= 5<<(4-1)*4; /* Disable pull-up on (EPWM4A) */ + GpioCtrlRegs.GPAMUX1.all|= 5<<(4-1)*4; /* Configure as EPWM4A */ EPwm4Regs.TZCTL.bit.TZA = TZ_OFF; /* diable A when trip zone */ EPwm4Regs.TZCTL.bit.TZB = TZ_OFF; /* diable B when trip zone */ -#endif -#ifdef BSP_USING_PWM5 - GpioCtrlRegs.GPAPUD.all |= 5<<(5-1)*4; /* Disable pull-up on GPIO0 (EPWM1A) */ - GpioCtrlRegs.GPAMUX1.all|= 5<<(5-1)*4; /* Configure GPIO0 as EPWM1A */ - EPwm5Regs.TZCTL.bit.TZA = TZ_OFF; /* diable A when trip zone */ - EPwm5Regs.TZCTL.bit.TZB = TZ_OFF; /* diable B when trip zone */ + EPwm4Regs.TBCTL.bit.CTRMODE = BSP_PWM4_CTRMODE; + EPwm4Regs.TBCTL.bit.HSPCLKDIV = BSP_PWM4_HSPCLKDIV; /* Clock ratio to SYSCLKOUT*/ + EPwm4Regs.TBCTL.bit.CLKDIV = BSP_PWM4_CLKDIV; + EPwm4Regs.CMPCTL.bit.LOADAMODE = BSP_PWM4_LOADAMODE; + EPwm4Regs.CMPCTL.bit.LOADBMODE = BSP_PWM4_LOADAMODE; + #ifdef BSP_PWM4_IT_ENABLE + EPwm4Regs.ETSEL.bit.INTEN = 1; /* Enable INT */ + EPwm4Regs.ETSEL.bit.INTSEL = BSP_PWM4_INTSEL; + EPwm4Regs.ETPS.bit.INTPRD = BSP_PWM4_INTPRD; + /* Assigning ISR to PIE */ + PieVectTable.EPWM4_INT = &EPWM4_Isr; + /* ENABLE Interrupt */ + #else + EPwm4Regs.ETSEL.bit.INTEN = 0; /* Disable INT */ + #endif + #ifdef BSP_PWM4_ADC_TRIGGER + EPwm4Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group + EPwm4Regs.ETSEL.bit.SOCASEL = BSP_PWM4_SOCASEL; // Select SOC from zero + EPwm4Regs.ETPS.bit.SOCAPRD = BSP_PWM4_SOCAPRD; // Generate pulse on 1st event + #else + EPwm4Regs.ETSEL.bit.SOCAEN = 0; // Disable SOC on A group + #endif + #ifdef BSP_PWM4_MASTER + EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; /* Disable phase loading */ + EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; + #else + EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE; /* Disable phase loading */ + EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; + #endif #endif EDIS; @@ -459,20 +567,21 @@ int c28x_pwm_init(void) struct rt_pwm_configuration config_tmp1 = { .channel = CHANNEL_A, - .period = 10000, - .pulse = 5000, - .dead_time = 100, + .period = BSP_PWM1_INIT_PERIOD, + .pulse = BSP_PWM1_INIT_PULSE, + .dead_time = BSP_PWM1_DB, .phase = 0, .complementary = RT_TRUE }; drv_pwm_set(c28x_pwm_obj[0].pwm_regs,&config_tmp1); - config_tmp1.phase = 180; - drv_pwm_set(c28x_pwm_obj[1].pwm_regs,&config_tmp1); - config_tmp1.phase = 90; - drv_pwm_set(c28x_pwm_obj[2].pwm_regs,&config_tmp1); - config_tmp1.phase = 270; - drv_pwm_set(c28x_pwm_obj[3].pwm_regs,&config_tmp1); +// config_tmp1.phase = BSP_PWM2_PHASE; +// drv_pwm_set(c28x_pwm_obj[1].pwm_regs,&config_tmp1); +// config_tmp1.phase = BSP_PWM3_PHASE; +// drv_pwm_set(c28x_pwm_obj[2].pwm_regs,&config_tmp1); +// config_tmp1.phase = BSP_PWM4_PHASE; +// drv_pwm_set(c28x_pwm_obj[3].pwm_regs,&config_tmp1); return result; } INIT_DEVICE_EXPORT(c28x_pwm_init); +#endif /* BSP_USING_PWM */ diff --git a/bsp/tms320f28379d/drivers/drv_pwm.h b/bsp/c28x/libraries/HAL_Drivers/drv_pwm.h similarity index 90% rename from bsp/tms320f28379d/drivers/drv_pwm.h rename to bsp/c28x/libraries/HAL_Drivers/drv_pwm.h index a91ee7a7d9..d3ef2ccddd 100644 --- a/bsp/tms320f28379d/drivers/drv_pwm.h +++ b/bsp/c28x/libraries/HAL_Drivers/drv_pwm.h @@ -13,6 +13,7 @@ #include #include "rtdevice.h" +#ifdef BSP_USING_PWM struct c28x_pwm { struct rt_device_pwm pwm_device; @@ -21,5 +22,5 @@ struct c28x_pwm }; int c28x_pwm_init(void); - +#endif /* BSP_USING_PWM */ #endif /* DRIVERS_DRV_PWM_H_ */ diff --git a/bsp/tms320f28379d/drivers/drv_sci.c b/bsp/c28x/libraries/HAL_Drivers/drv_sci.c similarity index 99% rename from bsp/tms320f28379d/drivers/drv_sci.c rename to bsp/c28x/libraries/HAL_Drivers/drv_sci.c index f3240953c7..f1ba3f26d3 100644 --- a/bsp/tms320f28379d/drivers/drv_sci.c +++ b/bsp/c28x/libraries/HAL_Drivers/drv_sci.c @@ -14,7 +14,7 @@ #include "F2837xD_device.h" #include "F2837xD_sci.h" -typedef long off_t; +//typedef long off_t; #include "F2837xD_sci_io.h" #ifdef RT_USING_SERIAL diff --git a/bsp/tms320f28379d/drivers/drv_sci.h b/bsp/c28x/libraries/HAL_Drivers/drv_sci.h similarity index 100% rename from bsp/tms320f28379d/drivers/drv_sci.h rename to bsp/c28x/libraries/HAL_Drivers/drv_sci.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Adc_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Adc_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Adc_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Adc_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Can_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Can_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Can_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Can_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Cla_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Cla_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Cla_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Cla_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Cla_typedefs.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Cla_typedefs.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Cla_typedefs.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Cla_typedefs.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Dma_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Dma_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Dma_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Dma_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_EPwm_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_EPwm_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_EPwm_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_EPwm_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Emif_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Emif_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Emif_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Emif_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Examples.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Examples.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Examples.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Examples.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_GlobalPrototypes.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_GlobalPrototypes.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_GlobalPrototypes.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_GlobalPrototypes.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Gpio_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Gpio_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Gpio_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Gpio_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_I2c_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_I2c_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_I2c_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_I2c_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Ipc_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Ipc_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Ipc_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Ipc_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Ipc_drivers.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Ipc_drivers.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Ipc_drivers.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Ipc_drivers.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Pie_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Pie_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Pie_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Pie_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_SWPrioritizedIsrLevels.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_SWPrioritizedIsrLevels.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_SWPrioritizedIsrLevels.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_SWPrioritizedIsrLevels.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_SysCtrl_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_SysCtrl_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_SysCtrl_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_SysCtrl_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Systick_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Systick_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Systick_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Systick_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_Upp_defines.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Upp_defines.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_Upp_defines.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_Upp_defines.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_cputimervars.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_cputimervars.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_cputimervars.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_cputimervars.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_defaultisr.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_defaultisr.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_defaultisr.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_defaultisr.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_sci_io.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_sci_io.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_sci_io.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_sci_io.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_sdfm_drivers.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_sdfm_drivers.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_sdfm_drivers.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_sdfm_drivers.h diff --git a/bsp/tms320f28379d/libraries/common/include/F2837xD_struct.h b/bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_struct.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F2837xD_struct.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F2837xD_struct.h diff --git a/bsp/tms320f28379d/libraries/common/include/F28x_Project.h b/bsp/c28x/libraries/tms320f28379d/common/include/F28x_Project.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/F28x_Project.h rename to bsp/c28x/libraries/tms320f28379d/common/include/F28x_Project.h diff --git a/bsp/tms320f28379d/libraries/common/include/device.h b/bsp/c28x/libraries/tms320f28379d/common/include/device.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/device.h rename to bsp/c28x/libraries/tms320f28379d/common/include/device.h diff --git a/bsp/tms320f28379d/libraries/common/include/driverlib.h b/bsp/c28x/libraries/tms320f28379d/common/include/driverlib.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/driverlib.h rename to bsp/c28x/libraries/tms320f28379d/common/include/driverlib.h diff --git a/bsp/tms320f28379d/libraries/common/include/stdint.h b/bsp/c28x/libraries/tms320f28379d/common/include/stdint.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/stdint.h rename to bsp/c28x/libraries/tms320f28379d/common/include/stdint.h diff --git a/bsp/tms320f28379d/libraries/common/include/usb.h b/bsp/c28x/libraries/tms320f28379d/common/include/usb.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/usb.h rename to bsp/c28x/libraries/tms320f28379d/common/include/usb.h diff --git a/bsp/tms320f28379d/libraries/common/include/usb_hal.h b/bsp/c28x/libraries/tms320f28379d/common/include/usb_hal.h similarity index 100% rename from bsp/tms320f28379d/libraries/common/include/usb_hal.h rename to bsp/c28x/libraries/tms320f28379d/common/include/usb_hal.h diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Adc.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Adc.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Adc.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Adc.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_CodeStartBranch.asm b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_CodeStartBranch.asm similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_CodeStartBranch.asm rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_CodeStartBranch.asm diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_CpuTimers.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_CpuTimers.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_CpuTimers.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_CpuTimers.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_DBGIER.asm b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_DBGIER.asm similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_DBGIER.asm rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_DBGIER.asm diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_DefaultISR.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_DefaultISR.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_DefaultISR.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_DefaultISR.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Dma.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Dma.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Dma.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Dma.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_ECap.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_ECap.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_ECap.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_ECap.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_EPwm.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_EPwm.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_EPwm.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_EPwm.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_EQep.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_EQep.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_EQep.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_EQep.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Emif.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Emif.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Emif.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Emif.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Gpio.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Gpio.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Gpio.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Gpio.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_I2C.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_I2C.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_I2C.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_I2C.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc_Driver.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc_Driver.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc_Driver_Lite.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Lite.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc_Driver_Lite.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Lite.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc_Driver_Util.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Util.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Ipc_Driver_Util.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Util.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Mcbsp.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Mcbsp.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Mcbsp.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Mcbsp.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_PieCtrl.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_PieCtrl.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_PieCtrl.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_PieCtrl.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_PieVect.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_PieVect.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_PieVect.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_PieVect.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_SWPrioritizedPieVect.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_SWPrioritizedPieVect.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_SWPrioritizedPieVect.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_SWPrioritizedPieVect.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Sci.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Sci.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Sci.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Sci.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Spi.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Spi.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Spi.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Spi.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_SysCtrl.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_SysCtrl.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_SysCtrl.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_SysCtrl.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_TempSensorConv.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_TempSensorConv.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_TempSensorConv.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_TempSensorConv.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_Upp.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Upp.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_Upp.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_Upp.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_can.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_can.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_can.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_can.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_sci_io.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_sci_io.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_sci_io.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_sci_io.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_sdfm_drivers.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_sdfm_drivers.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_sdfm_drivers.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_sdfm_drivers.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_struct.c b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_struct.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_struct.c rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_struct.c diff --git a/bsp/tms320f28379d/libraries/common/source/F2837xD_usDelay.asm b/bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_usDelay.asm similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/F2837xD_usDelay.asm rename to bsp/c28x/libraries/tms320f28379d/common/source/F2837xD_usDelay.asm diff --git a/bsp/tms320f28379d/libraries/common/source/device.c b/bsp/c28x/libraries/tms320f28379d/common/source/device.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/device.c rename to bsp/c28x/libraries/tms320f28379d/common/source/device.c diff --git a/bsp/tms320f28379d/libraries/common/source/usb.c b/bsp/c28x/libraries/tms320f28379d/common/source/usb.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/usb.c rename to bsp/c28x/libraries/tms320f28379d/common/source/usb.c diff --git a/bsp/tms320f28379d/libraries/common/source/usb_hal.c b/bsp/c28x/libraries/tms320f28379d/common/source/usb_hal.c similarity index 100% rename from bsp/tms320f28379d/libraries/common/source/usb_hal.c rename to bsp/c28x/libraries/tms320f28379d/common/source/usb_hal.c diff --git a/bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd b/bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd similarity index 100% rename from bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd rename to bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd diff --git a/bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd b/bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd similarity index 100% rename from bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd rename to bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd diff --git a/bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd b/bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd similarity index 100% rename from bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd rename to bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd diff --git a/bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd b/bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd similarity index 100% rename from bsp/tms320f28379d/libraries/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd rename to bsp/c28x/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_adc.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_adc.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_adc.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_adc.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_analogsubsys.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_analogsubsys.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_analogsubsys.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_analogsubsys.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_can.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_can.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_can.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_can.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_cla.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_cla.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_cla.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_cla.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_cmpss.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_cmpss.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_cmpss.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_cmpss.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_cputimer.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_cputimer.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_cputimer.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_cputimer.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_dac.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_dac.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_dac.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_dac.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_dcsm.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_dcsm.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_dcsm.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_dcsm.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_device.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_device.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_device.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_device.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_dma.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_dma.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_dma.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_dma.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_ecap.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_ecap.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_ecap.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_ecap.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_emif.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_emif.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_emif.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_emif.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_epwm.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_epwm.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_epwm.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_epwm.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_epwm_xbar.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_epwm_xbar.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_epwm_xbar.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_epwm_xbar.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_eqep.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_eqep.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_eqep.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_eqep.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_flash.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_flash.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_flash.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_flash.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_gpio.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_gpio.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_gpio.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_gpio.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_i2c.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_i2c.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_i2c.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_i2c.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_input_xbar.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_input_xbar.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_input_xbar.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_input_xbar.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_ipc.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_ipc.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_ipc.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_ipc.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_mcbsp.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_mcbsp.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_mcbsp.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_mcbsp.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_memconfig.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_memconfig.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_memconfig.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_memconfig.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_nmiintrupt.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_nmiintrupt.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_nmiintrupt.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_nmiintrupt.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_output_xbar.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_output_xbar.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_output_xbar.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_output_xbar.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_piectrl.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_piectrl.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_piectrl.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_piectrl.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_pievect.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_pievect.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_pievect.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_pievect.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_sci.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_sci.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_sci.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_sci.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_sdfm.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_sdfm.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_sdfm.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_sdfm.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_spi.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_spi.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_spi.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_spi.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_sysctrl.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_sysctrl.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_sysctrl.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_sysctrl.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_upp.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_upp.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_upp.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_upp.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_xbar.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_xbar.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_xbar.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_xbar.h diff --git a/bsp/tms320f28379d/libraries/headers/include/F2837xD_xint.h b/bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_xint.h similarity index 100% rename from bsp/tms320f28379d/libraries/headers/include/F2837xD_xint.h rename to bsp/c28x/libraries/tms320f28379d/headers/include/F2837xD_xint.h diff --git a/bsp/tms320f28379d/libraries/headers/source/F2837xD_GlobalVariableDefs.c b/bsp/c28x/libraries/tms320f28379d/headers/source/F2837xD_GlobalVariableDefs.c similarity index 100% rename from bsp/tms320f28379d/libraries/headers/source/F2837xD_GlobalVariableDefs.c rename to bsp/c28x/libraries/tms320f28379d/headers/source/F2837xD_GlobalVariableDefs.c diff --git a/bsp/tms320f28379d/.ccsproject b/bsp/c28x/tms320f28379d/.ccsproject similarity index 95% rename from bsp/tms320f28379d/.ccsproject rename to bsp/c28x/tms320f28379d/.ccsproject index e3dbeec008..028ef9f5ea 100644 --- a/bsp/tms320f28379d/.ccsproject +++ b/bsp/c28x/tms320f28379d/.ccsproject @@ -13,5 +13,5 @@ - + diff --git a/bsp/tms320f28379d/.config b/bsp/c28x/tms320f28379d/.config similarity index 97% rename from bsp/tms320f28379d/.config rename to bsp/c28x/tms320f28379d/.config index adeabca77e..15627f816e 100644 --- a/bsp/tms320f28379d/.config +++ b/bsp/c28x/tms320f28379d/.config @@ -79,7 +79,7 @@ CONFIG_RT_USING_DEVICE=y CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="scia" -CONFIG_RT_VER_NUM=0x40101 +CONFIG_RT_VER_NUM=0x50000 # CONFIG_RT_USING_CPU_FFS is not set CONFIG_ARCH_TIDSP=y CONFIG_ARCH_TIDSP_C28X=y @@ -129,7 +129,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set # CONFIG_RT_USING_DAC is not set -# CONFIG_RT_USING_PWM is not set +CONFIG_RT_USING_PWM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set @@ -655,3 +655,30 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_PKG_USING_MFBD is not set # CONFIG_PKG_USING_SLCAN2RTT is not set # CONFIG_PKG_USING_SOEM is not set + +# +# Hardware Drivers Config +# + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_USING_XINT is not set +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_ADC is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +# CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_CAN is not set +# CONFIG_BSP_USING_USBD is not set + +# +# Board extended module Drivers +# diff --git a/bsp/c28x/tms320f28379d/.cproject b/bsp/c28x/tms320f28379d/.cproject new file mode 100644 index 0000000000..36f16276d4 --- /dev/null +++ b/bsp/c28x/tms320f28379d/.cproject @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/c28x/tms320f28379d/.gitignore b/bsp/c28x/tms320f28379d/.gitignore new file mode 100644 index 0000000000..025af2b856 --- /dev/null +++ b/bsp/c28x/tms320f28379d/.gitignore @@ -0,0 +1,3 @@ +.launches/ +FLASH +RAM diff --git a/bsp/c28x/tms320f28379d/.project b/bsp/c28x/tms320f28379d/.project new file mode 100644 index 0000000000..fe05f8c849 --- /dev/null +++ b/bsp/c28x/tms320f28379d/.project @@ -0,0 +1,869 @@ + + + rt-thread + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + DeviceDrivers + 2 + virtual:/virtual + + + Kernel + 2 + PARENT-2-PROJECT_LOC/src + + + c28x + 2 + virtual:/virtual + + + finsh + 2 + PARENT-2-PROJECT_LOC/components/finsh + + + libraries + 2 + virtual:/virtual + + + DeviceDrivers/ipc + 2 + PARENT-2-PROJECT_LOC/components/drivers/ipc + + + DeviceDrivers/pin.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/misc/pin.c + + + DeviceDrivers/rt_drv_pwm.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/misc/rt_drv_pwm.c + + + DeviceDrivers/serial.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/serial/serial.c + + + Kernel/Kconfig + 1 + PARENT-3-PROJECT_LOC/src/Kconfig + + + Kernel/SConscript + 1 + PARENT-3-PROJECT_LOC/src/SConscript + + + Kernel/clock.c + 1 + PARENT-3-PROJECT_LOC/src/clock.c + + + Kernel/components.c + 1 + PARENT-3-PROJECT_LOC/src/components.c + + + Kernel/cpu.c + 1 + PARENT-3-PROJECT_LOC/src/cpu.c + + + Kernel/device.c + 1 + PARENT-3-PROJECT_LOC/src/device.c + + + Kernel/idle.c + 1 + PARENT-3-PROJECT_LOC/src/idle.c + + + Kernel/ipc.c + 1 + PARENT-3-PROJECT_LOC/src/ipc.c + + + Kernel/irq.c + 1 + PARENT-3-PROJECT_LOC/src/irq.c + + + Kernel/kservice.c + 1 + PARENT-3-PROJECT_LOC/src/kservice.c + + + Kernel/mem.c + 1 + PARENT-3-PROJECT_LOC/src/mem.c + + + Kernel/memheap.c + 1 + PARENT-3-PROJECT_LOC/src/memheap.c + + + Kernel/mempool.c + 1 + PARENT-3-PROJECT_LOC/src/mempool.c + + + Kernel/object.c + 1 + PARENT-3-PROJECT_LOC/src/object.c + + + Kernel/scheduler.c + 1 + PARENT-3-PROJECT_LOC/src/scheduler.c + + + Kernel/signal.c + 1 + PARENT-3-PROJECT_LOC/src/signal.c + + + Kernel/slab.c + 1 + PARENT-3-PROJECT_LOC/src/slab.c + + + Kernel/thread.c + 1 + PARENT-3-PROJECT_LOC/src/thread.c + + + Kernel/timer.c + 1 + PARENT-3-PROJECT_LOC/src/timer.c + + + c28x/SConscript + 1 + PARENT-3-PROJECT_LOC/libcpu/ti-dsp/c28x/SConscript + + + c28x/context.s + 1 + PARENT-3-PROJECT_LOC/libcpu/ti-dsp/c28x/context.s + + + c28x/cpuport.c + 1 + PARENT-3-PROJECT_LOC/libcpu/ti-dsp/c28x/cpuport.c + + + finsh/Kconfig + 1 + PARENT-3-PROJECT_LOC/components/finsh/Kconfig + + + finsh/SConscript + 1 + PARENT-3-PROJECT_LOC/components/finsh/SConscript + + + finsh/cmd.c + 1 + PARENT-3-PROJECT_LOC/components/finsh/cmd.c + + + finsh/finsh.h + 1 + PARENT-3-PROJECT_LOC/components/finsh/finsh.h + + + finsh/msh.c + 1 + PARENT-3-PROJECT_LOC/components/finsh/msh.c + + + finsh/msh.h + 1 + PARENT-3-PROJECT_LOC/components/finsh/msh.h + + + finsh/msh_file.c + 1 + PARENT-3-PROJECT_LOC/components/finsh/msh_file.c + + + finsh/msh_parse.c + 1 + PARENT-3-PROJECT_LOC/components/finsh/msh_parse.c + + + finsh/msh_parse.h + 1 + PARENT-3-PROJECT_LOC/components/finsh/msh_parse.h + + + finsh/shell.c + 1 + PARENT-3-PROJECT_LOC/components/finsh/shell.c + + + finsh/shell.h + 1 + PARENT-3-PROJECT_LOC/components/finsh/shell.h + + + libraries/HAL_Drivers + 2 + virtual:/virtual + + + libraries/tms320f28379d + 2 + virtual:/virtual + + + DeviceDrivers/ipc/SConscript + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/SConscript + + + DeviceDrivers/ipc/completion.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/completion.c + + + DeviceDrivers/ipc/dataqueue.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/dataqueue.c + + + DeviceDrivers/ipc/pipe.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/pipe.c + + + DeviceDrivers/ipc/ringblk_buf.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/ringblk_buf.c + + + DeviceDrivers/ipc/ringbuffer.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/ringbuffer.c + + + DeviceDrivers/ipc/waitqueue.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/waitqueue.c + + + DeviceDrivers/ipc/workqueue.c + 1 + PARENT-3-PROJECT_LOC/components/drivers/ipc/workqueue.c + + + libraries/HAL_Drivers/config + 2 + virtual:/virtual + + + libraries/HAL_Drivers/drv_config.h + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_config.h + + + libraries/HAL_Drivers/drv_gpio.c + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_gpio.c + + + libraries/HAL_Drivers/drv_gpio.h + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_gpio.h + + + libraries/HAL_Drivers/drv_pwm.c + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_pwm.c + + + libraries/HAL_Drivers/drv_pwm.h + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_pwm.h + + + libraries/HAL_Drivers/drv_sci.c + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_sci.c + + + libraries/HAL_Drivers/drv_sci.h + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/drv_sci.h + + + libraries/tms320f28379d/common + 2 + virtual:/virtual + + + libraries/tms320f28379d/headers + 2 + virtual:/virtual + + + libraries/HAL_Drivers/config/pwm_config.h + 1 + PARENT-1-PROJECT_LOC/libraries/HAL_Drivers/config/pwm_config.h + + + libraries/tms320f28379d/common/include + 2 + virtual:/virtual + + + libraries/tms320f28379d/common/source + 2 + virtual:/virtual + + + libraries/tms320f28379d/headers/cmd + 2 + virtual:/virtual + + + libraries/tms320f28379d/headers/include + 2 + virtual:/virtual + + + libraries/tms320f28379d/headers/source + 2 + virtual:/virtual + + + libraries/tms320f28379d/common/include/F2837xD_Adc_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Adc_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Can_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Can_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Cla_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Cla_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Cla_typedefs.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Cla_typedefs.h + + + libraries/tms320f28379d/common/include/F2837xD_Dma_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Dma_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_EPwm_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_EPwm_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Emif_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Emif_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Examples.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Examples.h + + + libraries/tms320f28379d/common/include/F2837xD_GlobalPrototypes.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_GlobalPrototypes.h + + + libraries/tms320f28379d/common/include/F2837xD_Gpio_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Gpio_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_I2c_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_I2c_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Ipc_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Ipc_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Ipc_drivers.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Ipc_drivers.h + + + libraries/tms320f28379d/common/include/F2837xD_Pie_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Pie_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_SWPrioritizedIsrLevels.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_SWPrioritizedIsrLevels.h + + + libraries/tms320f28379d/common/include/F2837xD_SysCtrl_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_SysCtrl_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Systick_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Systick_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_Upp_defines.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_Upp_defines.h + + + libraries/tms320f28379d/common/include/F2837xD_cputimervars.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_cputimervars.h + + + libraries/tms320f28379d/common/include/F2837xD_defaultisr.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_defaultisr.h + + + libraries/tms320f28379d/common/include/F2837xD_sci_io.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_sci_io.h + + + libraries/tms320f28379d/common/include/F2837xD_sdfm_drivers.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_sdfm_drivers.h + + + libraries/tms320f28379d/common/include/F2837xD_struct.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F2837xD_struct.h + + + libraries/tms320f28379d/common/include/F28x_Project.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/F28x_Project.h + + + libraries/tms320f28379d/common/include/device.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/device.h + + + libraries/tms320f28379d/common/include/driverlib.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/driverlib.h + + + libraries/tms320f28379d/common/include/stdint.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/stdint.h + + + libraries/tms320f28379d/common/include/usb.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/usb.h + + + libraries/tms320f28379d/common/include/usb_hal.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/include/usb_hal.h + + + libraries/tms320f28379d/common/source/F2837xD_Adc.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Adc.c + + + libraries/tms320f28379d/common/source/F2837xD_CodeStartBranch.asm + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_CodeStartBranch.asm + + + libraries/tms320f28379d/common/source/F2837xD_CpuTimers.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_CpuTimers.c + + + libraries/tms320f28379d/common/source/F2837xD_DBGIER.asm + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_DBGIER.asm + + + libraries/tms320f28379d/common/source/F2837xD_DefaultISR.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_DefaultISR.c + + + libraries/tms320f28379d/common/source/F2837xD_Dma.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Dma.c + + + libraries/tms320f28379d/common/source/F2837xD_ECap.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_ECap.c + + + libraries/tms320f28379d/common/source/F2837xD_EPwm.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_EPwm.c + + + libraries/tms320f28379d/common/source/F2837xD_EQep.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_EQep.c + + + libraries/tms320f28379d/common/source/F2837xD_Emif.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Emif.c + + + libraries/tms320f28379d/common/source/F2837xD_Gpio.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Gpio.c + + + libraries/tms320f28379d/common/source/F2837xD_I2C.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_I2C.c + + + libraries/tms320f28379d/common/source/F2837xD_Ipc.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Ipc.c + + + libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver.c + + + libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Lite.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Lite.c + + + libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Util.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Ipc_Driver_Util.c + + + libraries/tms320f28379d/common/source/F2837xD_Mcbsp.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Mcbsp.c + + + libraries/tms320f28379d/common/source/F2837xD_PieCtrl.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_PieCtrl.c + + + libraries/tms320f28379d/common/source/F2837xD_PieVect.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_PieVect.c + + + libraries/tms320f28379d/common/source/F2837xD_SWPrioritizedPieVect.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_SWPrioritizedPieVect.c + + + libraries/tms320f28379d/common/source/F2837xD_Sci.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Sci.c + + + libraries/tms320f28379d/common/source/F2837xD_Spi.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Spi.c + + + libraries/tms320f28379d/common/source/F2837xD_SysCtrl.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_SysCtrl.c + + + libraries/tms320f28379d/common/source/F2837xD_TempSensorConv.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_TempSensorConv.c + + + libraries/tms320f28379d/common/source/F2837xD_Upp.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_Upp.c + + + libraries/tms320f28379d/common/source/F2837xD_can.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_can.c + + + libraries/tms320f28379d/common/source/F2837xD_sci_io.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_sci_io.c + + + libraries/tms320f28379d/common/source/F2837xD_sdfm_drivers.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_sdfm_drivers.c + + + libraries/tms320f28379d/common/source/F2837xD_struct.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_struct.c + + + libraries/tms320f28379d/common/source/F2837xD_usDelay.asm + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/F2837xD_usDelay.asm + + + libraries/tms320f28379d/common/source/device.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/device.c + + + libraries/tms320f28379d/common/source/usb.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/usb.c + + + libraries/tms320f28379d/common/source/usb_hal.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/common/source/usb_hal.c + + + libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu1.cmd + + + libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_BIOS_cpu2.cmd + + + libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu1.cmd + + + libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/cmd/F2837xD_Headers_nonBIOS_cpu2.cmd + + + libraries/tms320f28379d/headers/include/F2837xD_adc.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_adc.h + + + libraries/tms320f28379d/headers/include/F2837xD_analogsubsys.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_analogsubsys.h + + + libraries/tms320f28379d/headers/include/F2837xD_can.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_can.h + + + libraries/tms320f28379d/headers/include/F2837xD_cla.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_cla.h + + + libraries/tms320f28379d/headers/include/F2837xD_cmpss.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_cmpss.h + + + libraries/tms320f28379d/headers/include/F2837xD_cputimer.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_cputimer.h + + + libraries/tms320f28379d/headers/include/F2837xD_dac.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_dac.h + + + libraries/tms320f28379d/headers/include/F2837xD_dcsm.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_dcsm.h + + + libraries/tms320f28379d/headers/include/F2837xD_device.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_device.h + + + libraries/tms320f28379d/headers/include/F2837xD_dma.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_dma.h + + + libraries/tms320f28379d/headers/include/F2837xD_ecap.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_ecap.h + + + libraries/tms320f28379d/headers/include/F2837xD_emif.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_emif.h + + + libraries/tms320f28379d/headers/include/F2837xD_epwm.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_epwm.h + + + libraries/tms320f28379d/headers/include/F2837xD_epwm_xbar.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_epwm_xbar.h + + + libraries/tms320f28379d/headers/include/F2837xD_eqep.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_eqep.h + + + libraries/tms320f28379d/headers/include/F2837xD_flash.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_flash.h + + + libraries/tms320f28379d/headers/include/F2837xD_gpio.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_gpio.h + + + libraries/tms320f28379d/headers/include/F2837xD_i2c.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_i2c.h + + + libraries/tms320f28379d/headers/include/F2837xD_input_xbar.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_input_xbar.h + + + libraries/tms320f28379d/headers/include/F2837xD_ipc.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_ipc.h + + + libraries/tms320f28379d/headers/include/F2837xD_mcbsp.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_mcbsp.h + + + libraries/tms320f28379d/headers/include/F2837xD_memconfig.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_memconfig.h + + + libraries/tms320f28379d/headers/include/F2837xD_nmiintrupt.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_nmiintrupt.h + + + libraries/tms320f28379d/headers/include/F2837xD_output_xbar.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_output_xbar.h + + + libraries/tms320f28379d/headers/include/F2837xD_piectrl.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_piectrl.h + + + libraries/tms320f28379d/headers/include/F2837xD_pievect.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_pievect.h + + + libraries/tms320f28379d/headers/include/F2837xD_sci.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_sci.h + + + libraries/tms320f28379d/headers/include/F2837xD_sdfm.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_sdfm.h + + + libraries/tms320f28379d/headers/include/F2837xD_spi.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_spi.h + + + libraries/tms320f28379d/headers/include/F2837xD_sysctrl.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_sysctrl.h + + + libraries/tms320f28379d/headers/include/F2837xD_upp.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_upp.h + + + libraries/tms320f28379d/headers/include/F2837xD_xbar.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_xbar.h + + + libraries/tms320f28379d/headers/include/F2837xD_xint.h + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/include/F2837xD_xint.h + + + libraries/tms320f28379d/headers/source/F2837xD_GlobalVariableDefs.c + 1 + PARENT-1-PROJECT_LOC/libraries/tms320f28379d/headers/source/F2837xD_GlobalVariableDefs.c + + + diff --git a/bsp/tms320f28379d/.settings/org.eclipse.cdt.codan.core.prefs b/bsp/c28x/tms320f28379d/.settings/org.eclipse.cdt.codan.core.prefs similarity index 100% rename from bsp/tms320f28379d/.settings/org.eclipse.cdt.codan.core.prefs rename to bsp/c28x/tms320f28379d/.settings/org.eclipse.cdt.codan.core.prefs diff --git a/bsp/tms320f28379d/.settings/org.eclipse.cdt.debug.core.prefs b/bsp/c28x/tms320f28379d/.settings/org.eclipse.cdt.debug.core.prefs similarity index 100% rename from bsp/tms320f28379d/.settings/org.eclipse.cdt.debug.core.prefs rename to bsp/c28x/tms320f28379d/.settings/org.eclipse.cdt.debug.core.prefs diff --git a/bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs b/bsp/c28x/tms320f28379d/.settings/org.eclipse.core.resources.prefs similarity index 55% rename from bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs rename to bsp/c28x/tms320f28379d/.settings/org.eclipse.core.resources.prefs index 9436acf25a..814522b6df 100644 --- a/bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs +++ b/bsp/c28x/tms320f28379d/.settings/org.eclipse.core.resources.prefs @@ -1,29 +1,12 @@ eclipse.preferences.version=1 -encoding//Debug/DeviceDrivers/ipc/subdir_rules.mk=UTF-8 -encoding//Debug/DeviceDrivers/ipc/subdir_vars.mk=UTF-8 -encoding//Debug/DeviceDrivers/subdir_rules.mk=UTF-8 -encoding//Debug/DeviceDrivers/subdir_vars.mk=UTF-8 -encoding//Debug/Kernel/subdir_rules.mk=UTF-8 -encoding//Debug/Kernel/subdir_vars.mk=UTF-8 -encoding//Debug/applications/subdir_rules.mk=UTF-8 -encoding//Debug/applications/subdir_vars.mk=UTF-8 -encoding//Debug/c28x/subdir_rules.mk=UTF-8 -encoding//Debug/c28x/subdir_vars.mk=UTF-8 encoding//Debug/drivers/subdir_rules.mk=UTF-8 encoding//Debug/drivers/subdir_vars.mk=UTF-8 -encoding//Debug/finsh/subdir_rules.mk=UTF-8 -encoding//Debug/finsh/subdir_vars.mk=UTF-8 encoding//Debug/libraries/common/source/subdir_rules.mk=UTF-8 encoding//Debug/libraries/common/source/subdir_vars.mk=UTF-8 encoding//Debug/libraries/headers/cmd/subdir_rules.mk=UTF-8 encoding//Debug/libraries/headers/cmd/subdir_vars.mk=UTF-8 encoding//Debug/libraries/headers/source/subdir_rules.mk=UTF-8 encoding//Debug/libraries/headers/source/subdir_vars.mk=UTF-8 -encoding//Debug/makefile=UTF-8 -encoding//Debug/objects.mk=UTF-8 -encoding//Debug/sources.mk=UTF-8 -encoding//Debug/subdir_rules.mk=UTF-8 -encoding//Debug/subdir_vars.mk=UTF-8 encoding//FLASH/DeviceDrivers/ipc/subdir_rules.mk=UTF-8 encoding//FLASH/DeviceDrivers/ipc/subdir_vars.mk=UTF-8 encoding//FLASH/DeviceDrivers/subdir_rules.mk=UTF-8 @@ -32,18 +15,34 @@ encoding//FLASH/Kernel/subdir_rules.mk=UTF-8 encoding//FLASH/Kernel/subdir_vars.mk=UTF-8 encoding//FLASH/applications/subdir_rules.mk=UTF-8 encoding//FLASH/applications/subdir_vars.mk=UTF-8 +encoding//FLASH/board/subdir_rules.mk=UTF-8 +encoding//FLASH/board/subdir_vars.mk=UTF-8 encoding//FLASH/c28x/subdir_rules.mk=UTF-8 encoding//FLASH/c28x/subdir_vars.mk=UTF-8 encoding//FLASH/drivers/subdir_rules.mk=UTF-8 encoding//FLASH/drivers/subdir_vars.mk=UTF-8 encoding//FLASH/finsh/subdir_rules.mk=UTF-8 encoding//FLASH/finsh/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/HAL_Drivers/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/HAL_Drivers/subdir_vars.mk=UTF-8 encoding//FLASH/libraries/common/source/subdir_rules.mk=UTF-8 encoding//FLASH/libraries/common/source/subdir_vars.mk=UTF-8 encoding//FLASH/libraries/headers/cmd/subdir_rules.mk=UTF-8 encoding//FLASH/libraries/headers/cmd/subdir_vars.mk=UTF-8 encoding//FLASH/libraries/headers/source/subdir_rules.mk=UTF-8 encoding//FLASH/libraries/headers/source/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/cmd/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/cmd/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/deprecated/driverlib/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/deprecated/driverlib/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/deprecated/utils/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/deprecated/utils/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/source/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/common/source/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/headers/cmd/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/headers/cmd/subdir_vars.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/headers/source/subdir_rules.mk=UTF-8 +encoding//FLASH/libraries/tms320f28379d/headers/source/subdir_vars.mk=UTF-8 encoding//FLASH/makefile=UTF-8 encoding//FLASH/objects.mk=UTF-8 encoding//FLASH/sources.mk=UTF-8 @@ -57,18 +56,34 @@ encoding//RAM/Kernel/subdir_rules.mk=UTF-8 encoding//RAM/Kernel/subdir_vars.mk=UTF-8 encoding//RAM/applications/subdir_rules.mk=UTF-8 encoding//RAM/applications/subdir_vars.mk=UTF-8 +encoding//RAM/board/subdir_rules.mk=UTF-8 +encoding//RAM/board/subdir_vars.mk=UTF-8 encoding//RAM/c28x/subdir_rules.mk=UTF-8 encoding//RAM/c28x/subdir_vars.mk=UTF-8 encoding//RAM/drivers/subdir_rules.mk=UTF-8 encoding//RAM/drivers/subdir_vars.mk=UTF-8 encoding//RAM/finsh/subdir_rules.mk=UTF-8 encoding//RAM/finsh/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/HAL_Drivers/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/HAL_Drivers/subdir_vars.mk=UTF-8 encoding//RAM/libraries/common/source/subdir_rules.mk=UTF-8 encoding//RAM/libraries/common/source/subdir_vars.mk=UTF-8 encoding//RAM/libraries/headers/cmd/subdir_rules.mk=UTF-8 encoding//RAM/libraries/headers/cmd/subdir_vars.mk=UTF-8 encoding//RAM/libraries/headers/source/subdir_rules.mk=UTF-8 encoding//RAM/libraries/headers/source/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/cmd/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/cmd/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/deprecated/driverlib/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/deprecated/driverlib/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/deprecated/utils/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/deprecated/utils/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/source/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/common/source/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/headers/cmd/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/headers/cmd/subdir_vars.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/headers/source/subdir_rules.mk=UTF-8 +encoding//RAM/libraries/tms320f28379d/headers/source/subdir_vars.mk=UTF-8 encoding//RAM/makefile=UTF-8 encoding//RAM/objects.mk=UTF-8 encoding//RAM/sources.mk=UTF-8 diff --git a/bsp/tms320f28379d/2837x_FLASH_lnk_cpu1.cmd b/bsp/c28x/tms320f28379d/2837x_FLASH_lnk_cpu1.cmd similarity index 100% rename from bsp/tms320f28379d/2837x_FLASH_lnk_cpu1.cmd rename to bsp/c28x/tms320f28379d/2837x_FLASH_lnk_cpu1.cmd diff --git a/bsp/tms320f28379d/2837x_RAM_lnk_cpu1.cmd b/bsp/c28x/tms320f28379d/2837x_RAM_lnk_cpu1.cmd similarity index 100% rename from bsp/tms320f28379d/2837x_RAM_lnk_cpu1.cmd rename to bsp/c28x/tms320f28379d/2837x_RAM_lnk_cpu1.cmd diff --git a/bsp/tms320f28379d/Kconfig b/bsp/c28x/tms320f28379d/Kconfig similarity index 92% rename from bsp/tms320f28379d/Kconfig rename to bsp/c28x/tms320f28379d/Kconfig index 6e4c810c5f..e832d7eb6d 100644 --- a/bsp/tms320f28379d/Kconfig +++ b/bsp/c28x/tms320f28379d/Kconfig @@ -8,7 +8,7 @@ config BSP_DIR config RTT_DIR string option env="RTT_ROOT" - default "../.." + default "../../.." # you can change the RTT_ROOT default "../.." to your rtthread_root, # example : default "F:/git_repositories/rt-thread" @@ -27,3 +27,4 @@ config SOC_TMS320F28X source "$RTT_DIR/Kconfig" source "$PKGS_DIR/Kconfig" +source "board/Kconfig" diff --git a/bsp/tms320f28379d/README.md b/bsp/c28x/tms320f28379d/README.md similarity index 100% rename from bsp/tms320f28379d/README.md rename to bsp/c28x/tms320f28379d/README.md diff --git a/bsp/tms320f28379d/applications/startup.c b/bsp/c28x/tms320f28379d/applications/startup.c similarity index 100% rename from bsp/tms320f28379d/applications/startup.c rename to bsp/c28x/tms320f28379d/applications/startup.c diff --git a/bsp/c28x/tms320f28379d/board/Kconfig b/bsp/c28x/tms320f28379d/board/Kconfig new file mode 100644 index 0000000000..740e3073ea --- /dev/null +++ b/bsp/c28x/tms320f28379d/board/Kconfig @@ -0,0 +1,1045 @@ +menu "Hardware Drivers Config" + +menu "Onboard Peripheral Drivers" +endmenu + +menu "On-chip Peripheral Drivers" + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + menuconfig BSP_USING_XINT + bool "Enable external interrupt" + default n + if BSP_USING_XINT + menuconfig BSP_USING_XINT1 + bool "Enable XINT1" + if BSP_USING_XINT1 + config BSP_XINT1_PIN + int "Interrupt pin" + range 0 168 + default 0 + endif + if !BSP_USING_XINT1 + config BSP_XINT1_PIN + int + default -1 + endif + menuconfig BSP_USING_XINT2 + bool "Enable XINT2" + if BSP_USING_XINT2 + config BSP_XINT2_PIN + int "Interrupt pin" + range 0 168 + default 0 + endif + if !BSP_USING_XINT2 + config BSP_XINT2_PIN + int + default -1 + endif + menuconfig BSP_USING_XINT3 + bool "Enable XINT3" + if BSP_USING_XINT3 + config BSP_XINT3_PIN + int "Interrupt pin" + range 0 168 + default 0 + endif + if !BSP_USING_XINT3 + config BSP_XINT3_PIN + int + default -1 + endif + menuconfig BSP_USING_XINT4 + bool "Enable XINT4" + if BSP_USING_XINT4 + config BSP_XINT4_PIN + int "Interrupt pin" + range 0 168 + default 0 + endif + if !BSP_USING_XINT4 + config BSP_XINT4_PIN + int + default -1 + endif + if !BSP_USING_XINT5 + config BSP_XINT5_PIN + int + default -1 + endif + menuconfig BSP_USING_XINT5 + bool "Enable XINT5" + if BSP_USING_XINT5 + config BSP_XINT5_PIN + int "Interrupt pin" + range 0 168 + default 0 + endif + endif + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + endif + menuconfig BSP_USING_PWM + bool "Enable PWM" + default n + select RT_USING_PWM + + if BSP_USING_PWM + menuconfig BSP_USING_PWM1 + bool "Enable ePWM1" + default n + if BSP_USING_PWM1 + menu "Basic settings for PWM1" + config BSP_PWM1_INIT_PERIOD + int "Initial period for PWM1(ns)" + default 10000 + config BSP_PWM1_INIT_PULSE + int "Initial pulse for PWM1(ns)" + default 1000 + endmenu + menu "Advanced Settings for PWM1" + menuconfig BSP_PWM1_PHASE_ENABLE + bool "Enable phase" + default n + if BSP_PWM1_PHASE_ENABLE + choice + prompt "Select master or slave" + default BSP_PWM1_MASTER + config BSP_PWM1_MASTER + bool "Master" + config BSP_PWM1_SLAVE + bool "Slave" + endchoice + if BSP_PWM1_MASTER + config BSP_PWM1_PHASE + int + default 0 + endif + if BSP_PWM1_SLAVE + config BSP_PWM1_PHASE + int "Phase, 0~360" + range 0 360 + default 0 + help + the phase for PWM1 module + endif + endif + + menuconfig BSP_PWM1_IT_ENABLE + bool "Enable interrupt service" + default n + if BSP_PWM1_IT_ENABLE + choice + prompt "Select interrupt time" + default BSP_PWM1_INTSEL_ET_CTR_ZERO + config BSP_PWM1_INTSEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM1_INTSEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM1_INTSEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM1_INTSEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM1_INTSEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM1_INTSEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM1_INTSEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM1_INTSEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM1_INTSEL + int + default 0 if BSP_PWM1_INTSEL_ET_DCAEVT1SOC + default 1 if BSP_PWM1_INTSEL_ET_CTR_ZERO + default 2 if BSP_PWM1_INTSEL_ET_CTR_PRD + default 3 if BSP_PWM1_INTSEL_ET_CTR_PRDZERO + default 4 if BSP_PWM1_INTSEL_ET_CTRU_CMPA + default 5 if BSP_PWM1_INTSEL_ET_CTRD_CMPA + default 6 if BSP_PWM1_INTSEL_ET_CTRU_CMPB + default 7 if BSP_PWM1_INTSEL_ET_CTRD_CMPB + choice + prompt "Interrupt generation time" + default BSP_PWM1_INT_ET_1ST + config BSP_PWM1_INT_ET_DISABLE + bool "disable PWM interrupt" + config BSP_PWM1_INT_ET_1ST + bool "generate interrupt at the first time" + config BSP_PWM1_INT_ET_2ND + bool "generate interrupt at the second time" + config BSP_PWM1_INT_ET_3RD + bool "generate interrupt at the third time" + endchoice + config BSP_PWM1_INTPRD + int + default 0 if BSP_PWM1_INT_ET_DISABLE + default 1 if BSP_PWM1_INT_ET_1ST + default 2 if BSP_PWM1_INT_ET_2ND + default 3 if BSP_PWM1_INT_ET_3RD + endif + choice + prompt "HSP Clock division" + default BSP_PWM1_HSPCLKDIV1 + config BSP_PWM1_HSPCLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM1_HSPCLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM1_HSPCLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM1_HSPCLKDIV + int + default 0 if BSP_PWM1_HSPCLKDIV1 + default 1 if BSP_PWM1_HSPCLKDIV2 + default 2 if BSP_PWM1_HSPCLKDIV4 + choice + prompt "Clock division" + default BSP_PWM1_CLKDIV1 + config BSP_PWM1_CLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM1_CLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM1_CLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM1_CLKDIV + int + default 0 if BSP_PWM1_CLKDIV1 + default 1 if BSP_PWM1_CLKDIV2 + default 2 if BSP_PWM1_CLKDIV4 + choice + default BSP_PWM1_CTR_MODE_UPDOWN + prompt "Select counter mode" + config BSP_PWM1_CTR_MODE_UPDOWN + bool "Up-down mode" + config BSP_PWM1_CTR_MODE_UP + bool "Up mode" + config BSP_PWM1_CTR_MODE_DOWN + bool "Down mode" + config BSP_PWM1_CTR_FREEZE + bool "Freezing Counter" + endchoice + config BSP_PWM1_CTRMODE + int + default 0 if BSP_PWM1_CTR_MODE_UP + default 1 if BSP_PWM1_CTR_MODE_DOWN + default 2 if BSP_PWM1_CTR_MODE_UPDOWN + default 3 if BSP_PWM1_CTR_FREEZE + choice + prompt "Register load mode" + config BSP_PWM1_CC_CTR_ZERO + bool "Load when counter == 0" + config BSP_PWM1_CC_CTR_PRD + bool "Load when counter == prd" + config BSP_PWM1_CC_CTR_ZERO_PRD + bool "load when counter ==0 or counter == prd" + config BSP_PWM1_CC_LD_DISABLE + bool "disable load" + endchoice + + config BSP_PWM1_LOADAMODE + int + default 0 if BSP_PWM1_CC_CTR_ZERO + default 1 if BSP_PWM1_CC_CTR_PRD + default 2 if BSP_PWM1_CC_CTR_ZERO_PRD + default 3 if BSP_PWM1_CC_LD_DISABLE + + config BSP_PWM1_DB + int "Dead time(ns)" + default 100 + range 0 100000 + menuconfig BSP_PWM1_ADC_TRIGGER + bool "Enable ADC trigger from PWM1" + if BSP_PWM1_ADC_TRIGGER + choice + prompt "Select soc triggering time" + default BSP_PWM1_SOCASEL_ET_CTR_ZERO + config BSP_PWM1_SOCASEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM1_SOCASEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM1_SOCASEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM1_SOCASEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM1_SOCASEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM1_SOCASEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM1_SOCASEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM1_SOCASEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM1_SOCASEL + int + default 0 if BSP_PWM1_SOCASEL_ET_DCAEVT1SOC + default 1 if BSP_PWM1_SOCASEL_ET_CTR_ZERO + default 2 if BSP_PWM1_SOCASEL_ET_CTR_PRD + default 3 if BSP_PWM1_SOCASEL_ET_CTR_PRDZERO + default 4 if BSP_PWM1_SOCASEL_ET_CTRU_CMPA + default 5 if BSP_PWM1_SOCASEL_ET_CTRD_CMPA + default 6 if BSP_PWM1_SOCASEL_ET_CTRU_CMPB + default 7 if BSP_PWM1_SOCASEL_ET_CTRD_CMPB + choice + prompt "SOCA generation time" + default BSP_PWM1_SOCA_ET_1ST + config BSP_PWM1_SOCA_ET_DISABLE + bool "disable soc generation" + config BSP_PWM1_SOCA_ET_1ST + bool "generate soc at the first time" + config BSP_PWM1_SOCA_ET_2ND + bool "generate soc at the second time" + config BSP_PWM1_SOCA_ET_3RD + bool "generate soc at the third time" + endchoice + config BSP_PWM1_SOCAPRD + int + default 0 if BSP_PWM1_SOCA_ET_DISABLE + default 1 if BSP_PWM1_SOCA_ET_1ST + default 2 if BSP_PWM1_SOCA_ET_2ND + default 3 if BSP_PWM1_SOCA_ET_3RD + endif + endmenu + endif + menuconfig BSP_USING_PWM2 + bool "Enable ePWM2" + default n + if BSP_USING_PWM2 + menu "Basic settings for PWM2" + config BSP_PWM2_INIT_PERIOD + int "Initial period for PWM2(ns)" + default 10000 + config BSP_PWM2_INIT_PULSE + int "Initial pulse for PWM2(ns)" + default 1000 + endmenu + menu "Advanced Settings for PWM2" + menuconfig BSP_PWM2_PHASE_ENABLE + bool "Enable phase" + default n + if BSP_PWM2_PHASE_ENABLE + choice + prompt "Select master or slave" + default BSP_PWM2_SLAVE + config BSP_PWM2_MASTER + bool "Master" + config BSP_PWM2_SLAVE + bool "Slave" + endchoice + if BSP_PWM2_MASTER + config BSP_PWM2_PHASE + int + default 0 + endif + if BSP_PWM2_SLAVE + config BSP_PWM2_PHASE + int "Phase, 0~360" + range 0 360 + default 0 + help + the phase for PWM2 module + endif + endif + + menuconfig BSP_PWM2_IT_ENABLE + bool "Enable interrupt service" + default n + if BSP_PWM2_IT_ENABLE + choice + prompt "Select interrupt time" + default BSP_PWM2_INTSEL_ET_CTR_ZERO + config BSP_PWM2_INTSEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM2_INTSEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM2_INTSEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM2_INTSEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM2_INTSEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM2_INTSEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM2_INTSEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM2_INTSEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM2_INTSEL + int + default 0 if BSP_PWM2_INTSEL_ET_DCAEVT1SOC + default 1 if BSP_PWM2_INTSEL_ET_CTR_ZERO + default 2 if BSP_PWM2_INTSEL_ET_CTR_PRD + default 3 if BSP_PWM2_INTSEL_ET_CTR_PRDZERO + default 4 if BSP_PWM2_INTSEL_ET_CTRU_CMPA + default 5 if BSP_PWM2_INTSEL_ET_CTRD_CMPA + default 6 if BSP_PWM2_INTSEL_ET_CTRU_CMPB + default 7 if BSP_PWM2_INTSEL_ET_CTRD_CMPB + choice + prompt "Interrupt generation time" + default BSP_PWM2_INT_ET_1ST + config BSP_PWM2_INT_ET_DISABLE + bool "disable PWM interrupt" + config BSP_PWM2_INT_ET_1ST + bool "generate interrupt at the first time" + config BSP_PWM2_INT_ET_2ND + bool "generate interrupt at the second time" + config BSP_PWM2_INT_ET_3RD + bool "generate interrupt at the third time" + endchoice + config BSP_PWM2_INTPRD + int + default 0 if BSP_PWM2_INT_ET_DISABLE + default 1 if BSP_PWM2_INT_ET_1ST + default 2 if BSP_PWM2_INT_ET_2ND + default 3 if BSP_PWM2_INT_ET_3RD + endif + choice + prompt "HSP Clock division" + default BSP_PWM2_HSPCLKDIV1 + config BSP_PWM2_HSPCLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM2_HSPCLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM2_HSPCLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM2_HSPCLKDIV + int + default 0 if BSP_PWM2_HSPCLKDIV1 + default 1 if BSP_PWM2_HSPCLKDIV2 + default 2 if BSP_PWM2_HSPCLKDIV4 + choice + prompt "Clock division" + default BSP_PWM2_CLKDIV1 + config BSP_PWM2_CLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM2_CLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM2_CLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM2_CLKDIV + int + default 0 if BSP_PWM2_CLKDIV1 + default 1 if BSP_PWM2_CLKDIV2 + default 2 if BSP_PWM2_CLKDIV4 + choice + default BSP_PWM2_CTR_MODE_UPDOWN + prompt "Select counter mode" + config BSP_PWM2_CTR_MODE_UPDOWN + bool "Up-down mode" + config BSP_PWM2_CTR_MODE_UP + bool "Up mode" + config BSP_PWM2_CTR_MODE_DOWN + bool "Down mode" + config BSP_PWM2_CTR_FREEZE + bool "Freezing Counter" + endchoice + config BSP_PWM2_CTRMODE + int + default 0 if BSP_PWM2_CTR_MODE_UP + default 1 if BSP_PWM2_CTR_MODE_DOWN + default 2 if BSP_PWM2_CTR_MODE_UPDOWN + default 3 if BSP_PWM2_CTR_FREEZE + choice + prompt "Register load mode" + config BSP_PWM2_CC_CTR_ZERO + bool "Load when counter == 0" + config BSP_PWM2_CC_CTR_PRD + bool "Load when counter == prd" + config BSP_PWM2_CC_CTR_ZERO_PRD + bool "load when counter ==0 or counter == prd" + config BSP_PWM2_CC_LD_DISABLE + bool "disable load" + endchoice + + config BSP_PWM2_LOADAMODE + int + default 0 if BSP_PWM2_CC_CTR_ZERO + default 1 if BSP_PWM2_CC_CTR_PRD + default 2 if BSP_PWM2_CC_CTR_ZERO_PRD + default 3 if BSP_PWM2_CC_LD_DISABLE + + config BSP_PWM2_DB + int "Dead time(ns)" + default 100 + range 0 100000 + menuconfig BSP_PWM2_ADC_TRIGGER + bool "Enable ADC trigger from PWM2" + if BSP_PWM2_ADC_TRIGGER + choice + prompt "Select soc triggering time" + default BSP_PWM2_SOCASEL_ET_CTR_ZERO + config BSP_PWM2_SOCASEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM2_SOCASEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM2_SOCASEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM2_SOCASEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM2_SOCASEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM2_SOCASEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM2_SOCASEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM2_SOCASEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM2_SOCASEL + int + default 0 if BSP_PWM2_SOCASEL_ET_DCAEVT1SOC + default 1 if BSP_PWM2_SOCASEL_ET_CTR_ZERO + default 2 if BSP_PWM2_SOCASEL_ET_CTR_PRD + default 3 if BSP_PWM2_SOCASEL_ET_CTR_PRDZERO + default 4 if BSP_PWM2_SOCASEL_ET_CTRU_CMPA + default 5 if BSP_PWM2_SOCASEL_ET_CTRD_CMPA + default 6 if BSP_PWM2_SOCASEL_ET_CTRU_CMPB + default 7 if BSP_PWM2_SOCASEL_ET_CTRD_CMPB + choice + prompt "SOCA generation time" + default BSP_PWM2_SOCA_ET_1ST + config BSP_PWM2_SOCA_ET_DISABLE + bool "disable soc generation" + config BSP_PWM2_SOCA_ET_1ST + bool "generate soc at the first time" + config BSP_PWM2_SOCA_ET_2ND + bool "generate soc at the second time" + config BSP_PWM2_SOCA_ET_3RD + bool "generate soc at the third time" + endchoice + config BSP_PWM2_SOCAPRD + int + default 0 if BSP_PWM2_SOCA_ET_DISABLE + default 1 if BSP_PWM2_SOCA_ET_1ST + default 2 if BSP_PWM2_SOCA_ET_2ND + default 3 if BSP_PWM2_SOCA_ET_3RD + endif + endmenu + endif + menuconfig BSP_USING_PWM3 + bool "Enable ePWM3" + default n + if BSP_USING_PWM3 + menu "Basic settings for PWM3" + config BSP_PWM3_INIT_PERIOD + int "Initial period for PWM3(ns)" + default 10000 + config BSP_PWM3_INIT_PULSE + int "Initial pulse for PWM3(ns)" + default 1000 + endmenu + menu "Advanced Settings for PWM3" + menuconfig BSP_PWM3_PHASE_ENABLE + bool "Enable phase" + default n + if BSP_PWM3_PHASE_ENABLE + choice + prompt "Select master or slave" + default BSP_PWM3_SLAVE + config BSP_PWM3_MASTER + bool "Master" + config BSP_PWM3_SLAVE + bool "Slave" + endchoice + if BSP_PWM3_MASTER + config BSP_PWM3_PHASE + int + default 0 + endif + if BSP_PWM3_SLAVE + config BSP_PWM3_PHASE + int "Phase, 0~360" + range 0 360 + default 0 + help + the phase for PWM3 module + endif + endif + + menuconfig BSP_PWM3_IT_ENABLE + bool "Enable interrupt service" + default n + if BSP_PWM3_IT_ENABLE + choice + prompt "Select interrupt time" + default BSP_PWM3_INTSEL_ET_CTR_ZERO + config BSP_PWM3_INTSEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM3_INTSEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM3_INTSEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM3_INTSEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM3_INTSEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM3_INTSEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM3_INTSEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM3_INTSEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM3_INTSEL + int + default 0 if BSP_PWM3_INTSEL_ET_DCAEVT1SOC + default 1 if BSP_PWM3_INTSEL_ET_CTR_ZERO + default 2 if BSP_PWM3_INTSEL_ET_CTR_PRD + default 3 if BSP_PWM3_INTSEL_ET_CTR_PRDZERO + default 4 if BSP_PWM3_INTSEL_ET_CTRU_CMPA + default 5 if BSP_PWM3_INTSEL_ET_CTRD_CMPA + default 6 if BSP_PWM3_INTSEL_ET_CTRU_CMPB + default 7 if BSP_PWM3_INTSEL_ET_CTRD_CMPB + choice + prompt "Interrupt generation time" + default BSP_PWM3_INT_ET_1ST + config BSP_PWM3_INT_ET_DISABLE + bool "disable PWM interrupt" + config BSP_PWM3_INT_ET_1ST + bool "generate interrupt at the first time" + config BSP_PWM3_INT_ET_2ND + bool "generate interrupt at the second time" + config BSP_PWM3_INT_ET_3RD + bool "generate interrupt at the third time" + endchoice + config BSP_PWM3_INTPRD + int + default 0 if BSP_PWM3_INT_ET_DISABLE + default 1 if BSP_PWM3_INT_ET_1ST + default 2 if BSP_PWM3_INT_ET_2ND + default 3 if BSP_PWM3_INT_ET_3RD + endif + choice + prompt "HSP Clock division" + default BSP_PWM3_HSPCLKDIV1 + config BSP_PWM3_HSPCLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM3_HSPCLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM3_HSPCLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM3_HSPCLKDIV + int + default 0 if BSP_PWM3_HSPCLKDIV1 + default 1 if BSP_PWM3_HSPCLKDIV2 + default 2 if BSP_PWM3_HSPCLKDIV4 + choice + prompt "Clock division" + default BSP_PWM3_CLKDIV1 + config BSP_PWM3_CLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM3_CLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM3_CLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM3_CLKDIV + int + default 0 if BSP_PWM3_CLKDIV1 + default 1 if BSP_PWM3_CLKDIV2 + default 2 if BSP_PWM3_CLKDIV4 + choice + default BSP_PWM3_CTR_MODE_UPDOWN + prompt "Select counter mode" + config BSP_PWM3_CTR_MODE_UPDOWN + bool "Up-down mode" + config BSP_PWM3_CTR_MODE_UP + bool "Up mode" + config BSP_PWM3_CTR_MODE_DOWN + bool "Down mode" + config BSP_PWM3_CTR_FREEZE + bool "Freezing Counter" + endchoice + config BSP_PWM3_CTRMODE + int + default 0 if BSP_PWM3_CTR_MODE_UP + default 1 if BSP_PWM3_CTR_MODE_DOWN + default 2 if BSP_PWM3_CTR_MODE_UPDOWN + default 3 if BSP_PWM3_CTR_FREEZE + choice + prompt "Register load mode" + config BSP_PWM3_CC_CTR_ZERO + bool "Load when counter == 0" + config BSP_PWM3_CC_CTR_PRD + bool "Load when counter == prd" + config BSP_PWM3_CC_CTR_ZERO_PRD + bool "load when counter ==0 or counter == prd" + config BSP_PWM3_CC_LD_DISABLE + bool "disable load" + endchoice + + config BSP_PWM3_LOADAMODE + int + default 0 if BSP_PWM3_CC_CTR_ZERO + default 1 if BSP_PWM3_CC_CTR_PRD + default 2 if BSP_PWM3_CC_CTR_ZERO_PRD + default 3 if BSP_PWM3_CC_LD_DISABLE + + config BSP_PWM3_DB + int "Dead time(ns)" + default 100 + range 0 100000 + menuconfig BSP_PWM3_ADC_TRIGGER + bool "Enable ADC trigger from PWM3" + if BSP_PWM3_ADC_TRIGGER + choice + prompt "Select soc triggering time" + default BSP_PWM3_SOCASEL_ET_CTR_ZERO + config BSP_PWM3_SOCASEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM3_SOCASEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM3_SOCASEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM3_SOCASEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM3_SOCASEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM3_SOCASEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM3_SOCASEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM3_SOCASEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM3_SOCASEL + int + default 0 if BSP_PWM3_SOCASEL_ET_DCAEVT1SOC + default 1 if BSP_PWM3_SOCASEL_ET_CTR_ZERO + default 2 if BSP_PWM3_SOCASEL_ET_CTR_PRD + default 3 if BSP_PWM3_SOCASEL_ET_CTR_PRDZERO + default 4 if BSP_PWM3_SOCASEL_ET_CTRU_CMPA + default 5 if BSP_PWM3_SOCASEL_ET_CTRD_CMPA + default 6 if BSP_PWM3_SOCASEL_ET_CTRU_CMPB + default 7 if BSP_PWM3_SOCASEL_ET_CTRD_CMPB + choice + prompt "SOCA generation time" + default BSP_PWM3_SOCA_ET_1ST + config BSP_PWM3_SOCA_ET_DISABLE + bool "disable soc generation" + config BSP_PWM3_SOCA_ET_1ST + bool "generate soc at the first time" + config BSP_PWM3_SOCA_ET_2ND + bool "generate soc at the second time" + config BSP_PWM3_SOCA_ET_3RD + bool "generate soc at the third time" + endchoice + config BSP_PWM3_SOCAPRD + int + default 0 if BSP_PWM3_SOCA_ET_DISABLE + default 1 if BSP_PWM3_SOCA_ET_1ST + default 2 if BSP_PWM3_SOCA_ET_2ND + default 3 if BSP_PWM3_SOCA_ET_3RD + endif + endmenu + endif + menuconfig BSP_USING_PWM4 + bool "Enable ePWM4" + default n + if BSP_USING_PWM4 + menu "Basic settings for PWM4" + config BSP_PWM4_INIT_PERIOD + int "Initial period for PWM4(ns)" + default 10000 + config BSP_PWM4_INIT_PULSE + int "Initial pulse for PWM4(ns)" + default 1000 + endmenu + menu "Advanced Settings for PWM4" + menuconfig BSP_PWM4_PHASE_ENABLE + bool "Enable phase" + default n + if BSP_PWM4_PHASE_ENABLE + choice + prompt "Select master or slave" + default BSP_PWM4_SLAVE + config BSP_PWM4_MASTER + bool "Master" + config BSP_PWM4_SLAVE + bool "Slave" + endchoice + if BSP_PWM4_MASTER + config BSP_PWM4_PHASE + int + default 0 + endif + if BSP_PWM4_SLAVE + config BSP_PWM4_PHASE + int "Phase, 0~360" + range 0 360 + default 0 + help + the phase for PWM4 module + endif + endif + + menuconfig BSP_PWM4_IT_ENABLE + bool "Enable interrupt service" + default n + if BSP_PWM4_IT_ENABLE + choice + prompt "Select interrupt time" + default BSP_PWM4_INTSEL_ET_CTR_ZERO + config BSP_PWM4_INTSEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM4_INTSEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM4_INTSEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM4_INTSEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM4_INTSEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM4_INTSEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM4_INTSEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM4_INTSEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM4_INTSEL + int + default 0 if BSP_PWM4_INTSEL_ET_DCAEVT1SOC + default 1 if BSP_PWM4_INTSEL_ET_CTR_ZERO + default 2 if BSP_PWM4_INTSEL_ET_CTR_PRD + default 3 if BSP_PWM4_INTSEL_ET_CTR_PRDZERO + default 4 if BSP_PWM4_INTSEL_ET_CTRU_CMPA + default 5 if BSP_PWM4_INTSEL_ET_CTRD_CMPA + default 6 if BSP_PWM4_INTSEL_ET_CTRU_CMPB + default 7 if BSP_PWM4_INTSEL_ET_CTRD_CMPB + choice + prompt "Interrupt generation time" + default BSP_PWM4_INT_ET_1ST + config BSP_PWM4_INT_ET_DISABLE + bool "disable PWM interrupt" + config BSP_PWM4_INT_ET_1ST + bool "generate interrupt at the first time" + config BSP_PWM4_INT_ET_2ND + bool "generate interrupt at the second time" + config BSP_PWM4_INT_ET_3RD + bool "generate interrupt at the third time" + endchoice + config BSP_PWM4_INTPRD + int + default 0 if BSP_PWM4_INT_ET_DISABLE + default 1 if BSP_PWM4_INT_ET_1ST + default 2 if BSP_PWM4_INT_ET_2ND + default 3 if BSP_PWM4_INT_ET_3RD + endif + choice + prompt "HSP Clock division" + default BSP_PWM4_HSPCLKDIV1 + config BSP_PWM4_HSPCLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM4_HSPCLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM4_HSPCLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM4_HSPCLKDIV + int + default 0 if BSP_PWM4_HSPCLKDIV1 + default 1 if BSP_PWM4_HSPCLKDIV2 + default 2 if BSP_PWM4_HSPCLKDIV4 + choice + prompt "Clock division" + default BSP_PWM4_CLKDIV1 + config BSP_PWM4_CLKDIV1 + bool "Clock Divided by 1" + config BSP_PWM4_CLKDIV2 + bool "Clock Divided by 2" + config BSP_PWM4_CLKDIV4 + bool "Clock Divided by 4" + endchoice + config BSP_PWM4_CLKDIV + int + default 0 if BSP_PWM4_CLKDIV1 + default 1 if BSP_PWM4_CLKDIV2 + default 2 if BSP_PWM4_CLKDIV4 + choice + default BSP_PWM4_CTR_MODE_UPDOWN + prompt "Select counter mode" + config BSP_PWM4_CTR_MODE_UPDOWN + bool "Up-down mode" + config BSP_PWM4_CTR_MODE_UP + bool "Up mode" + config BSP_PWM4_CTR_MODE_DOWN + bool "Down mode" + config BSP_PWM4_CTR_FREEZE + bool "Freezing Counter" + endchoice + config BSP_PWM4_CTRMODE + int + default 0 if BSP_PWM4_CTR_MODE_UP + default 1 if BSP_PWM4_CTR_MODE_DOWN + default 2 if BSP_PWM4_CTR_MODE_UPDOWN + default 3 if BSP_PWM4_CTR_FREEZE + choice + prompt "Register load mode" + config BSP_PWM4_CC_CTR_ZERO + bool "Load when counter == 0" + config BSP_PWM4_CC_CTR_PRD + bool "Load when counter == prd" + config BSP_PWM4_CC_CTR_ZERO_PRD + bool "load when counter ==0 or counter == prd" + config BSP_PWM4_CC_LD_DISABLE + bool "disable load" + endchoice + + config BSP_PWM4_LOADAMODE + int + default 0 if BSP_PWM4_CC_CTR_ZERO + default 1 if BSP_PWM4_CC_CTR_PRD + default 2 if BSP_PWM4_CC_CTR_ZERO_PRD + default 3 if BSP_PWM4_CC_LD_DISABLE + + config BSP_PWM4_DB + int "Dead time(ns)" + default 100 + range 0 100000 + menuconfig BSP_PWM4_ADC_TRIGGER + bool "Enable ADC trigger from PWM4" + if BSP_PWM4_ADC_TRIGGER + choice + prompt "Select soc triggering time" + default BSP_PWM4_SOCASEL_ET_CTR_ZERO + config BSP_PWM4_SOCASEL_ET_DCAEVT1SOC + bool "DCAEVT1SOC" + config BSP_PWM4_SOCASEL_ET_CTR_ZERO + bool "ctr == zero" + config BSP_PWM4_SOCASEL_ET_CTR_PRD + bool "ctr == prd" + config BSP_PWM4_SOCASEL_ET_CTR_PRDZERO + bool "ctr == prd or ctr == zero" + config BSP_PWM4_SOCASEL_ET_CTRU_CMPA + bool "ctr == compa when counting up" + config BSP_PWM4_SOCASEL_ET_CTRD_CMPA + bool "ctr == compa when counting down" + config BSP_PWM4_SOCASEL_ET_CTRU_CMPB + bool "ctr == compb when counting up" + config BSP_PWM4_SOCASEL_ET_CTRD_CMPB + bool "ctr == compb when counting down" + endchoice + + config BSP_PWM4_SOCASEL + int + default 0 if BSP_PWM4_SOCASEL_ET_DCAEVT1SOC + default 1 if BSP_PWM4_SOCASEL_ET_CTR_ZERO + default 2 if BSP_PWM4_SOCASEL_ET_CTR_PRD + default 3 if BSP_PWM4_SOCASEL_ET_CTR_PRDZERO + default 4 if BSP_PWM4_SOCASEL_ET_CTRU_CMPA + default 5 if BSP_PWM4_SOCASEL_ET_CTRD_CMPA + default 6 if BSP_PWM4_SOCASEL_ET_CTRU_CMPB + default 7 if BSP_PWM4_SOCASEL_ET_CTRD_CMPB + choice + prompt "SOCA generation time" + default BSP_PWM4_SOCA_ET_1ST + config BSP_PWM4_SOCA_ET_DISABLE + bool "disable soc generation" + config BSP_PWM4_SOCA_ET_1ST + bool "generate soc at the first time" + config BSP_PWM4_SOCA_ET_2ND + bool "generate soc at the second time" + config BSP_PWM4_SOCA_ET_3RD + bool "generate soc at the third time" + endchoice + config BSP_PWM4_SOCAPRD + int + default 0 if BSP_PWM4_SOCA_ET_DISABLE + default 1 if BSP_PWM4_SOCA_ET_1ST + default 2 if BSP_PWM4_SOCA_ET_2ND + default 3 if BSP_PWM4_SOCA_ET_3RD + endif + endmenu + endif + endif + + menuconfig BSP_USING_ADC + bool "Enable ADC" + default n + select RT_USING_ADC + if BSP_USING_ADC + config BSP_USING_ADC1 + bool "Enable ADC1" + default n + endif + + menuconfig BSP_USING_ONCHIP_RTC + bool "Enable RTC" + select RT_USING_RTC + default n + if BSP_USING_ONCHIP_RTC + choice + prompt "Select clock source" + default BSP_RTC_USING_LSE + + config BSP_RTC_USING_LSE + bool "RTC USING LSE" + + config BSP_RTC_USING_LSI + bool "RTC USING LSI" + endchoice + endif + + config BSP_USING_WDT + bool "Enable Watchdog Timer" + select RT_USING_WDT + default n + + config BSP_USING_SDIO + bool "Enable SDIO" + select RT_USING_SDIO + select RT_USING_DFS + default n + + menuconfig BSP_USING_CAN + bool "Enable CAN" + default n + select RT_USING_CAN + if BSP_USING_CAN + config BSP_USING_CAN1 + bool "using CAN1" + default n + endif + + config BSP_USING_USBD + bool "Enable USB device" + select RT_USING_USB_DEVICE + default n + if BSP_USING_USBD + config BSP_USB_CONNECT_PIN + int "USB connect pin" + default 67 + + config BSP_USB_PULL_UP_STATUS + int "USB PULL UP STATUS" + default 0 + endif +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/tms320f28379d/drivers/board.c b/bsp/c28x/tms320f28379d/board/board.c similarity index 84% rename from bsp/tms320f28379d/drivers/board.c rename to bsp/c28x/tms320f28379d/board/board.c index 2c9c38eb05..c391a2589e 100644 --- a/bsp/tms320f28379d/drivers/board.c +++ b/bsp/c28x/tms320f28379d/board/board.c @@ -13,6 +13,7 @@ #include #include "board.h" #include "drv_sci.h" +#include "drv_gpio.h" #include "F28x_Project.h" #ifndef RT_USING_SMP @@ -59,6 +60,8 @@ interrupt void cpu_timer2_isr(void) rt_interrupt_leave(); } +extern interrupt void XINT1_Handler(void); +extern interrupt void XINT2_Handler(void); /** * This function will initial TMS320F28379D board. */ @@ -82,12 +85,29 @@ void rt_hw_board_init() EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TIMER2_INT = &cpu_timer2_isr; PieVectTable.RTOS_INT = &RTOSINT_Handler; + +#ifdef BSP_USING_XINT1 + PieVectTable.XINT1_INT = &XINT1_Handler; +#endif +#ifdef BSP_USING_XINT2 + PieVectTable.XINT2_INT = &XINT2_Handler; +#endif +#ifdef BSP_USING_XINT3 + PieVectTable.XINT3_INT = &XINT3_Handler; +#endif +#ifdef BSP_USING_XINT4 + PieVectTable.XINT4_INT = &XINT4_Handler; +#endif +#ifdef BSP_USING_XINT5 + PieVectTable.XINT5_INT = &XINT5_Handler; +#endif EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer2, 200, 1000000 / RT_TICK_PER_SECOND); CpuTimer2Regs.TCR.all = 0x4000; IER |= M_INT14; + IER |= M_INT1; #ifdef RT_USING_HEAP rt_system_heap_init(&__ebss_end, &(__heap_end)); @@ -97,6 +117,10 @@ void rt_hw_board_init() rt_hw_sci_init(); #endif +#ifdef RT_USING_PIN + rt_hw_pin_init(); +#endif + #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif diff --git a/bsp/tms320f28379d/drivers/board.h b/bsp/c28x/tms320f28379d/board/board.h similarity index 100% rename from bsp/tms320f28379d/drivers/board.h rename to bsp/c28x/tms320f28379d/board/board.h diff --git a/bsp/tms320f28379d/figures/build.png b/bsp/c28x/tms320f28379d/figures/build.png similarity index 100% rename from bsp/tms320f28379d/figures/build.png rename to bsp/c28x/tms320f28379d/figures/build.png diff --git a/bsp/tms320f28379d/figures/debug_as.png b/bsp/c28x/tms320f28379d/figures/debug_as.png similarity index 100% rename from bsp/tms320f28379d/figures/debug_as.png rename to bsp/c28x/tms320f28379d/figures/debug_as.png diff --git a/bsp/tms320f28379d/figures/import.png b/bsp/c28x/tms320f28379d/figures/import.png similarity index 100% rename from bsp/tms320f28379d/figures/import.png rename to bsp/c28x/tms320f28379d/figures/import.png diff --git a/bsp/tms320f28379d/figures/import_dia.png b/bsp/c28x/tms320f28379d/figures/import_dia.png similarity index 100% rename from bsp/tms320f28379d/figures/import_dia.png rename to bsp/c28x/tms320f28379d/figures/import_dia.png diff --git a/bsp/tms320f28379d/figures/launch-28379d.png b/bsp/c28x/tms320f28379d/figures/launch-28379d.png similarity index 100% rename from bsp/tms320f28379d/figures/launch-28379d.png rename to bsp/c28x/tms320f28379d/figures/launch-28379d.png diff --git a/bsp/tms320f28379d/figures/launching.png b/bsp/c28x/tms320f28379d/figures/launching.png similarity index 100% rename from bsp/tms320f28379d/figures/launching.png rename to bsp/c28x/tms320f28379d/figures/launching.png diff --git a/bsp/tms320f28379d/rtconfig.h b/bsp/c28x/tms320f28379d/rtconfig.h similarity index 93% rename from bsp/tms320f28379d/rtconfig.h rename to bsp/c28x/tms320f28379d/rtconfig.h index 5c94c07763..fc87483220 100644 --- a/bsp/tms320f28379d/rtconfig.h +++ b/bsp/c28x/tms320f28379d/rtconfig.h @@ -45,7 +45,7 @@ #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "scia" -#define RT_VER_NUM 0x40101 +#define RT_VER_NUM 0x50000 #define ARCH_TIDSP #define ARCH_TIDSP_C28X #define ARCH_CPU_STACK_GROWS_UPWARD @@ -177,6 +177,19 @@ /* entertainment: terminal games and other interesting software packages */ + +/* Hardware Drivers Config */ + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + #include "rtconfig_project.h" #endif diff --git a/bsp/tms320f28379d/rtconfig_project.h b/bsp/c28x/tms320f28379d/rtconfig_project.h similarity index 100% rename from bsp/tms320f28379d/rtconfig_project.h rename to bsp/c28x/tms320f28379d/rtconfig_project.h diff --git a/bsp/tms320f28379d/targetConfigs/TMS320F28379D.ccxml b/bsp/c28x/tms320f28379d/targetConfigs/TMS320F28379D.ccxml similarity index 100% rename from bsp/tms320f28379d/targetConfigs/TMS320F28379D.ccxml rename to bsp/c28x/tms320f28379d/targetConfigs/TMS320F28379D.ccxml diff --git a/bsp/tms320f28379d/targetConfigs/readme.txt b/bsp/c28x/tms320f28379d/targetConfigs/readme.txt similarity index 100% rename from bsp/tms320f28379d/targetConfigs/readme.txt rename to bsp/c28x/tms320f28379d/targetConfigs/readme.txt diff --git a/bsp/stm32/stm32f103-atk-nano/.config b/bsp/stm32/stm32f103-atk-nano/.config index d03f8c6844..2ca2f6d4e7 100644 --- a/bsp/stm32/stm32f103-atk-nano/.config +++ b/bsp/stm32/stm32f103-atk-nano/.config @@ -80,7 +80,7 @@ CONFIG_RT_USING_DEVICE=y CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x40101 +CONFIG_RT_VER_NUM=0x50000 CONFIG_ARCH_ARM=y CONFIG_RT_USING_CPU_FFS=y CONFIG_ARCH_ARM_CORTEX_M=y @@ -505,7 +505,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_AS7341 is not set # CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set +# CONFIG_PKG_USING_RTT_ESP_IDF is not set # CONFIG_PKG_USING_ICM20608 is not set # CONFIG_PKG_USING_BUTTON is not set # CONFIG_PKG_USING_PCF8574 is not set @@ -583,7 +583,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_PKG_USING_CW2015 is not set # CONFIG_PKG_USING_RFM300 is not set # CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # # AI packages @@ -659,64 +658,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_PKG_USING_MFBD is not set # CONFIG_PKG_USING_SLCAN2RTT is not set # CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set - -# -# Privated Packages of RealThread -# -# CONFIG_PKG_USING_CODEC is not set -# CONFIG_PKG_USING_PLAYER is not set -# CONFIG_PKG_USING_MPLAYER is not set -# CONFIG_PKG_USING_PERSIMMON_SRC is not set -# CONFIG_PKG_USING_JS_PERSIMMON is not set -# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set - -# -# Network Utilities -# -# CONFIG_PKG_USING_WICED is not set -# CONFIG_PKG_USING_CLOUDSDK is not set -# CONFIG_PKG_USING_POWER_MANAGER is not set -# CONFIG_PKG_USING_RT_OTA is not set -# CONFIG_PKG_USING_RTINSIGHT is not set -# CONFIG_PKG_USING_SMARTCONFIG is not set -# CONFIG_PKG_USING_RTX is not set -# CONFIG_RT_USING_TESTCASE is not set -# CONFIG_PKG_USING_NGHTTP2 is not set -# CONFIG_PKG_USING_AVS is not set -# CONFIG_PKG_USING_ALI_LINKKIT is not set -# CONFIG_PKG_USING_STS is not set -# CONFIG_PKG_USING_DLMS is not set -# CONFIG_PKG_USING_AUDIO_FRAMEWORK is not set -# CONFIG_PKG_USING_ZBAR is not set -# CONFIG_PKG_USING_MCF is not set -# CONFIG_PKG_USING_URPC is not set -# CONFIG_PKG_USING_DCM is not set -# CONFIG_PKG_USING_EMQ is not set -# CONFIG_PKG_USING_CFGM is not set -# CONFIG_PKG_USING_RT_CMSIS_DAP is not set -# CONFIG_PKG_USING_SMODULE is not set -# CONFIG_PKG_USING_SNFD is not set -# CONFIG_PKG_USING_UDBD is not set -# CONFIG_PKG_USING_BENCHMARK is not set -# CONFIG_PKG_USING_UBJSON is not set -# CONFIG_PKG_USING_DATATYPE is not set -# CONFIG_PKG_USING_FASTFS is not set -# CONFIG_PKG_USING_RIL is not set -# CONFIG_PKG_USING_WATCH_DCM_SVC is not set -# CONFIG_PKG_USING_WATCH_APP_FWK is not set -# CONFIG_PKG_USING_GUI_TEST is not set -# CONFIG_PKG_USING_PMEM is not set -# CONFIG_PKG_USING_LWRDP is not set -# CONFIG_PKG_USING_MASAN is not set -# CONFIG_PKG_USING_BSDIFF_LIB is not set -# CONFIG_PKG_USING_PRC_DIFF is not set - -# -# RT-Thread Smart -# -# CONFIG_PKG_USING_UKERNEL is not set -# CONFIG_PKG_USING_TRACE_AGENT is not set CONFIG_SOC_FAMILY_STM32=y CONFIG_SOC_SERIES_STM32F1=y diff --git a/bsp/stm32/stm32f103-atk-nano/rtconfig.h b/bsp/stm32/stm32f103-atk-nano/rtconfig.h index ab30f3810e..976345330d 100644 --- a/bsp/stm32/stm32f103-atk-nano/rtconfig.h +++ b/bsp/stm32/stm32f103-atk-nano/rtconfig.h @@ -46,7 +46,7 @@ #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x40101 +#define RT_VER_NUM 0x50000 #define ARCH_ARM #define RT_USING_CPU_FFS #define ARCH_ARM_CORTEX_M @@ -179,15 +179,6 @@ /* entertainment: terminal games and other interesting software packages */ - -/* Privated Packages of RealThread */ - - -/* Network Utilities */ - - -/* RT-Thread Smart */ - #define SOC_FAMILY_STM32 #define SOC_SERIES_STM32F1 diff --git a/bsp/tms320f28379d/.cproject b/bsp/tms320f28379d/.cproject deleted file mode 100644 index 4dcd4d64f1..0000000000 --- a/bsp/tms320f28379d/.cproject +++ /dev/null @@ -1,401 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bsp/tms320f28379d/.gitignore b/bsp/tms320f28379d/.gitignore deleted file mode 100644 index e335ff02f9..0000000000 --- a/bsp/tms320f28379d/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.launches/ -/FLASH/ -/RAM/ diff --git a/bsp/tms320f28379d/.project b/bsp/tms320f28379d/.project deleted file mode 100644 index d8178fe759..0000000000 --- a/bsp/tms320f28379d/.project +++ /dev/null @@ -1,64 +0,0 @@ - - - rt-thread - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - com.ti.ccstudio.core.ccsNature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - - - DeviceDrivers - 2 - virtual:/virtual - - - Kernel - 2 - PARENT-2-PROJECT_LOC/src - - - c28x - 2 - PARENT-2-PROJECT_LOC/libcpu/ti-dsp/c28x - - - finsh - 2 - PARENT-2-PROJECT_LOC/components/finsh - - - DeviceDrivers/ipc - 2 - PARENT-2-PROJECT_LOC/components/drivers/ipc - - - DeviceDrivers/rt_drv_pwm.c - 1 - PARENT-2-PROJECT_LOC/components/drivers/misc/rt_drv_pwm.c - - - DeviceDrivers/serial.c - 1 - PARENT-2-PROJECT_LOC/components/drivers/serial/serial.c - - - diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_CLA_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_CLA_lnk_cpu1.cmd deleted file mode 100644 index 9bc86fabf8..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_CLA_lnk_cpu1.cmd +++ /dev/null @@ -1,178 +0,0 @@ -// The user must define CLA_C in the project linker settings if using the -// CLA C compiler -// Project Properties -> C2000 Linker -> Advanced Options -> Command File -// Preprocessing -> --define -#ifdef CLA_C -// Define a size for the CLA scratchpad area that will be used -// by the CLA compiler for local symbols and temps -// Also force references to the special symbols that mark the -// scratchpad are. -CLA_SCRATCHPAD_SIZE = 0x100; ---undef_sym=__cla_scratchpad_end ---undef_sym=__cla_scratchpad_start -#endif //CLA_C - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - /* RAMLS4 : origin = 0x00A000, length = 0x000800 */ - /* RAMLS5 : origin = 0x00A800, length = 0x000800 */ - RAMLS4_5 : origin = 0x00A000, length = 0x001000 - - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 - EMIF1_CS2n : origin = 0x00100000, length = 0x00200000 - EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 - EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 - EMIF2_CS0n : origin = 0x90000000, length = 0x10000000 - EMIF2_CS2n : origin = 0x00002000, length = 0x00001000 - - CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080 - CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080 -} - - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : > FLASHB PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : > RAMLS2 PAGE = 1 - .esysmem : > RAMLS2 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : > FLASHB PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - .em2_cs0 : > EMIF2_CS0n, PAGE = 1 - .em2_cs2 : > EMIF2_CS2n, PAGE = 1 - - /* CLA specific sections */ - Cla1Prog : LOAD = FLASHD, - RUN = RAMLS4_5, - LOAD_START(_Cla1funcsLoadStart), - LOAD_END(_Cla1funcsLoadEnd), - RUN_START(_Cla1funcsRunStart), - LOAD_SIZE(_Cla1funcsLoadSize), - PAGE = 0, ALIGN(4) - - CLADataLS0 : > RAMLS0, PAGE=0 - CLADataLS1 : > RAMLS1, PAGE=0 - - Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW, PAGE = 1 - CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMD0, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMD0, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - -#ifdef CLA_C - /* CLA C compiler sections */ - // - // Must be allocated to memory the CLA has write access to - // - CLAscratch : - { *.obj(CLAscratch) - . += CLA_SCRATCHPAD_SIZE; - *.obj(CLAscratch_end) } > RAMLS1, PAGE = 0 - - .scratchpad : > RAMLS1, PAGE = 0 - .bss_cla : > RAMLS1, PAGE = 0 - .const_cla : LOAD = FLASHB, - RUN = RAMLS1, - RUN_START(_Cla1ConstRunStart), - LOAD_START(_Cla1ConstLoadStart), - LOAD_SIZE(_Cla1ConstLoadSize), - PAGE = 0 -#endif //CLA_C -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_IQMATH_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_IQMATH_lnk_cpu1.cmd deleted file mode 100644 index afd9da2351..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_IQMATH_lnk_cpu1.cmd +++ /dev/null @@ -1,134 +0,0 @@ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : /* Data Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */ - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : > FLASHB PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : > RAMLS5 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : > FLASHB PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - Filter_RegsFile : > RAMGS0, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* Allocate IQ math areas: */ - IQmath : > FLASHB, PAGE = 0, ALIGN(4) /* Math Code */ - IQmathTables : > FLASHC, PAGE = 0, ALIGN(4) -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_SGEN_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_SGEN_lnk_cpu1.cmd deleted file mode 100644 index ffcab867e8..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_SGEN_lnk_cpu1.cmd +++ /dev/null @@ -1,147 +0,0 @@ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ - /* BEGIN is used for the "boot to Flash" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : /* Data Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */ - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : >> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : >> FLASHF | FLASHG | FLASHH PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - .cio : > RAMGS2, PAGE = 1 - - /* Sine Table */ - SINTBL : > FLASHN, PAGE = 1 - - /* Data Log */ - DLOG : > RAMGS3, PAGE = 1 - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_TMU_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_TMU_lnk_cpu1.cmd deleted file mode 100644 index e2d9e19e0f..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_TMU_lnk_cpu1.cmd +++ /dev/null @@ -1,136 +0,0 @@ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ - /* BEGIN is used for the "boot to Flash" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : /* Data Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */ - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2_GS4 : origin = 0x00E000, length = 0x003000 - /* - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - */ - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMGS1 PAGE = 1 - .ebss : > RAMGS2_GS4 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : >> FLASHF | FLASHG | FLASHH PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - .sysmem : > RAMGS1, PAGE = 1 - .cio : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_afe031_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_afe031_lnk_cpu1.cmd deleted file mode 100644 index 323926d783..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_afe031_lnk_cpu1.cmd +++ /dev/null @@ -1,170 +0,0 @@ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ - /* BEGIN is used for the "boot to Flash" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x001800 - // RAMLS3 : origin = 0x009800, length = 0x000800 - // RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : /* Data Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */ - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : >> RAMGS0 | RAMGS1 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - .cio : > RAMLS5 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : >> FLASHG | FLASHH PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - ramls2 : > RAMLS2, PAGE = 0 -// SINETABLE : > FLASHF PAGE = 0, ALIGN(4) - -fsk_corr_lib_data : > RAMGS5 PAGE = 1 /* Flash block for lib data */ - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 , - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - #ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 -SINETABLE : {} LOAD = FLASHF, - RUN = RAMLS2 , - LOAD_START(_SineTableLoadStart), - LOAD_SIZE(_SineTableLoadSize), - LOAD_END(_SineTableLoadEnd), - RUN_START(_SineTableRunStart), - RUN_SIZE(_SineTableRunSize), - RUN_END(_SineTableRunEnd), - PAGE = 0, ALIGN(4) - - #else -SINETABLE : LOAD = FLASHF, - RUN = RAMLS2 , - LOAD_START(_SineTableLoadStart), - LOAD_SIZE(_SineTableLoadSize), - LOAD_END(_SineTableLoadEnd), - RUN_START(_SineTableRunStart), - RUN_SIZE(_SineTableRunSize), - RUN_END(_SineTableRunEnd), - PAGE = 0, ALIGN(4) - - #endif -#endif - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1.cmd deleted file mode 100644 index b1dadb8351..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1.cmd +++ /dev/null @@ -1,142 +0,0 @@ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ - /* BEGIN is used for the "boot to Flash" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : /* Data Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */ - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : >> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - .cio : > RAMLS5 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : >> FLASHF | FLASHG | FLASHH PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1_far.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1_far.cmd deleted file mode 100644 index f8744f3935..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu1_far.cmd +++ /dev/null @@ -1,156 +0,0 @@ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ - /* BEGIN is used for the "boot to Flash" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : /* Data Memory */ - /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */ - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 - EMIF1_CS2n : origin = 0x00100000, length = 0x00200000 - EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 - EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 - EMIF2_CS0n : origin = 0x90000000, length = 0x10000000 - EMIF2_CS2n : origin = 0x00002000, length = 0x00001000 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : >> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - .farbss : > EMIF1_CS0n, PAGE = 1 - - .em1_cs0 : > EMIF1_CS0n, PAGE = 1 - .em1_cs2 : > EMIF1_CS2n, PAGE = 1 - .em1_cs3 : > EMIF1_CS3n, PAGE = 1 - .em1_cs4 : > EMIF1_CS4n, PAGE = 1 - .em2_cs0 : > EMIF2_CS0n, PAGE = 1 - .em2_cs2 : > EMIF2_CS2n, PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : >> FLASHF | FLASHG | FLASHH PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - .farconst : > EMIF1_CS0n, PAGE = 1 - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2.cmd deleted file mode 100644 index 038dfdbed8..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2.cmd +++ /dev/null @@ -1,114 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000080, length = 0x000380 - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x00007E /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : > FLASHB PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : > RAMLS5 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - - /* Initalized sections go in Flash */ - .econst : > FLASHB PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2_far.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2_far.cmd deleted file mode 100644 index bd7aff0faf..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_FLASH_lnk_cpu2_far.cmd +++ /dev/null @@ -1,120 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x080000, length = 0x000002 - RAMM0 : origin = 0x000080, length = 0x000380 - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - - /* Flash sectors */ - FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */ - FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */ - FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */ - FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */ - FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */ - FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */ - FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */ - FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */ - FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */ - FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */ - FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */ - FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */ - FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */ - FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */ - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x00007E /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - - EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 - EMIF1_CS2n : origin = 0x00100000, length = 0x00200000 - EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 - EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - /* Allocate program areas: */ - .cinit : > FLASHB PAGE = 0, ALIGN(4) - .pinit : > FLASHB, PAGE = 0, ALIGN(4) - .text : > FLASHB PAGE = 0, ALIGN(4) - codestart : > BEGIN PAGE = 0, ALIGN(4) - - /* Allocate uninitalized data sections: */ - .stack : > RAMM1 PAGE = 1 - .ebss : > RAMLS5 PAGE = 1 - .esysmem : > RAMLS5 PAGE = 1 - .farbss : > EMIF1_CS0n, PAGE = 1 - /* Initalized sections go in Flash */ - .econst : > FLASHB PAGE = 0, ALIGN(4) - .switch : > FLASHB PAGE = 0, ALIGN(4) - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - .farconst : > EMIF1_CS0n, PAGE = 1 - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #else - ramfuncs : LOAD = FLASHD, - RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, - LOAD_START(_RamfuncsLoadStart), - LOAD_SIZE(_RamfuncsLoadSize), - LOAD_END(_RamfuncsLoadEnd), - RUN_START(_RamfuncsRunStart), - RUN_SIZE(_RamfuncsRunSize), - RUN_END(_RamfuncsRunEnd), - PAGE = 0, ALIGN(4) - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd deleted file mode 100644 index 55100fcccb..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd +++ /dev/null @@ -1,135 +0,0 @@ -// The user must define CLA_C in the project linker settings if using the -// CLA C compiler -// Project Properties -> C2000 Linker -> Advanced Options -> Command File -// Preprocessing -> --define -#ifdef CLA_C -// Define a size for the CLA scratchpad area that will be used -// by the CLA compiler for local symbols and temps -// Also force references to the special symbols that mark the -// scratchpad are. -CLA_SCRATCHPAD_SIZE = 0x100; ---undef_sym=__cla_scratchpad_end ---undef_sym=__cla_scratchpad_start -#endif //CLA_C - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMD1 : origin = 0x00B800, length = 0x000800 - /* RAMLS4 : origin = 0x00A000, length = 0x000800 */ - /* RAMLS5 : origin = 0x00A800, length = 0x000800 */ - RAMLS4_5 : origin = 0x00A000, length = 0x001000 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 - EMIF1_CS2n : origin = 0x00100000, length = 0x00200000 - EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 - EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 - EMIF2_CS0n : origin = 0x90000000, length = 0x10000000 - EMIF2_CS2n : origin = 0x00002000, length = 0x00001000 - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080 - CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080 -} - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >> RAMM0 | RAMD0 | RAMD1, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS2, PAGE = 1 - .econst : > RAMLS3, PAGE = 1 - .esysmem : > RAMLS3, PAGE = 1 - Filter_RegsFile : > RAMGS0, PAGE = 1 - - .em1_cs0 : > EMIF1_CS0n, PAGE = 1 - .em1_cs2 : > EMIF1_CS2n, PAGE = 1 - .em1_cs3 : > EMIF1_CS3n, PAGE = 1 - .em1_cs4 : > EMIF1_CS4n, PAGE = 1 - .em2_cs0 : > EMIF2_CS0n, PAGE = 1 - .em2_cs2 : > EMIF2_CS2n, PAGE = 1 - - /* CLA specific sections */ - Cla1Prog : > RAMLS4_5, PAGE=0 - - CLADataLS0 : > RAMLS0, PAGE=1 - CLADataLS1 : > RAMLS1, PAGE=1 - - Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW, PAGE = 1 - CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1 - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - -#ifdef CLA_C - /* CLA C compiler sections */ - // - // Must be allocated to memory the CLA has write access to - // - CLAscratch : - { *.obj(CLAscratch) - . += CLA_SCRATCHPAD_SIZE; - *.obj(CLAscratch_end) } > RAMLS1, PAGE = 1 - - .scratchpad : > RAMLS1, PAGE = 1 - .bss_cla : > RAMLS1, PAGE = 1 - .const_cla : > RAMLS1, PAGE = 1 -#endif //CLA_C -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu1.cmd deleted file mode 100644 index 690c322d80..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu1.cmd +++ /dev/null @@ -1,38 +0,0 @@ -/* Linker map for Soprano Shared Memory. */ - -MEMORY -{ -PAGE 0 : /* Program memory. This is a legacy description since the C28 has a unified memory model. */ - - -PAGE 1 : /* Data memory. This is a legacy description since the C28 has a unified memory model. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - -} - -/* -* =========================================================================== -* End of file. -* =========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu2.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu2.cmd deleted file mode 100644 index ca157058ee..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IPC_lnk_cpu2.cmd +++ /dev/null @@ -1,37 +0,0 @@ -/* Linker map for Soprano Shared Memory. */ - -MEMORY -{ -PAGE 0 : /* Program memory. This is a legacy description since the C28 has a unified memory model. */ - -PAGE 1 : /* Data memory. This is a legacy description since the C28 has a unified memory model. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - -} - -/* -* =========================================================================== -* End of file. -* =========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IQMATH_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IQMATH_lnk_cpu1.cmd deleted file mode 100644 index 405efe5900..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_IQMATH_lnk_cpu1.cmd +++ /dev/null @@ -1,103 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1_LS2 : origin = 0x008800, length = 0x001000 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1_LS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - Filter_RegsFile : > RAMGS0, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 - - /* Allocate IQ math areas: */ - IQmath : > RAMLS0, PAGE = 0 /* Math Code */ - IQmathTables : > RAMLS1_LS2, PAGE = 0 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SGEN_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SGEN_lnk_cpu1.cmd deleted file mode 100644 index 0f42056151..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SGEN_lnk_cpu1.cmd +++ /dev/null @@ -1,106 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - Filter_RegsFile : > RAMGS0, PAGE = 1 - - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - .cio : > RAMGS2, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* Sine Table */ - SINTBL : > RAMGS2, PAGE = 1 - - /* Data Log */ - DLOG : > RAMGS3, PAGE = 1 - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SWPrioritizedISR_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SWPrioritizedISR_lnk_cpu1.cmd deleted file mode 100644 index b5c4b58c78..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_SWPrioritizedISR_lnk_cpu1.cmd +++ /dev/null @@ -1,89 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - RAMGS0_2 : origin = 0x00C000, length = 0x003000 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMGS0_2, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_TMU_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_TMU_lnk_cpu1.cmd deleted file mode 100644 index 22e06c6e58..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_TMU_lnk_cpu1.cmd +++ /dev/null @@ -1,97 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMLS5 : origin = 0x00A800, length = 0x000800 - RAMGS0 : origin = 0x00C000, length = 0x001000 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2_GS4 : origin = 0x00E000, length = 0x003000 - /* - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - */ - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text :>> RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4 | RAMLS5 | RAMGS0, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMGS1, PAGE = 1 - .ebss : > RAMGS2_GS4,PAGE = 1 - .econst : > RAMGS1, PAGE = 1 - .esysmem : > RAMGS1, PAGE = 1 - Filter_RegsFile : > RAMGS1, PAGE = 1 - - .sysmem : > RAMGS1, PAGE = 1 - .cio : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_afe031_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_afe031_lnk_cpu1.cmd deleted file mode 100644 index 5da6b7958c..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_afe031_lnk_cpu1.cmd +++ /dev/null @@ -1,99 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS234 : origin = 0x009000, length = 0x001800 - // RAMLS3 : origin = 0x009800, length = 0x000800 - // RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMLS5 : origin = 0x00A800, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >> RAMD0 | RAMLS0 | RAMLS1, PAGE = 0 - .cinit : >RAMM0 , PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : >> RAMGS0, PAGE = 1 - .econst : >> RAMLS234, PAGE = 0 - .esysmem : > RAMLS5, PAGE = 0 - Filter_RegsFile : > RAMGS0, PAGE = 1 - - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS3, PAGE = 1 - - SINETABLE : > RAMLS234 PAGE = 0 /* Ram block for SINETABLE data */ - fsk_corr_lib_data : > RAMGS5, PAGE = 1 /* Ram block for lib data */ - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1.cmd deleted file mode 100644 index 1561ba58b7..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1.cmd +++ /dev/null @@ -1,103 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - Filter_RegsFile : > RAMGS0, PAGE = 1 - - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_USB.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_USB.cmd deleted file mode 100644 index 0b470f5951..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_USB.cmd +++ /dev/null @@ -1,97 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x002000 - - - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS01 : origin = 0x008000, length = 0x001000 -/* RAMLS1 : origin = 0x008800, length = 0x000800 */ - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3_RAMLS4_RAMLS5 : origin = 0x009800, length = 0x001800 -/* RAMLS3 : origin = 0x009800, length = 0x000800 */ -/* RAMLS4 : origin = 0x00A000, length = 0x000800 */ -/* RAMLS5 : origin = 0x00A800, length = 0x000800 */ - - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >> RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5, PAGE = 0 - .cio : > RAMLS3_RAMLS4_RAMLS5, PAGE = 1 - .sysmem : > RAMD1, PAGE = 1 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : >> RAMLS01 | RAMLS2 | RAMLS3_RAMLS4_RAMLS5, PAGE = 1 - .econst : > RAMLS3_RAMLS4_RAMLS5, PAGE = 1 - .esysmem : > RAMLS3_RAMLS4_RAMLS5, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_far.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_far.cmd deleted file mode 100644 index 709c066557..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu1_far.cmd +++ /dev/null @@ -1,121 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 - EMIF1_CS2n : origin = 0x00100000, length = 0x00200000 - EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 - EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 - EMIF2_CS0n : origin = 0x90000000, length = 0x10000000 - EMIF2_CS2n : origin = 0x00002000, length = 0x00001000 - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - - .farbss : > EMIF1_CS0n, PAGE = 1 - .farconst : > EMIF1_CS0n, PAGE = 1 - - .em1_cs0 : > EMIF1_CS0n, PAGE = 1 - .em1_cs2 : > EMIF1_CS2n, PAGE = 1 - .em1_cs3 : > EMIF1_CS3n, PAGE = 1 - .em1_cs4 : > EMIF1_CS4n, PAGE = 1 - .em2_cs0 : > EMIF2_CS0n, PAGE = 1 - .em2_cs2 : > EMIF2_CS2n, PAGE = 1 - - Filter_RegsFile : > RAMGS0, PAGE = 1 - - ramgs0 : > RAMGS0, PAGE = 1 - ramgs1 : > RAMGS1, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } - - /* The following section definition are for SDFM examples */ - Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 - Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 - Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 - Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 - Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2.cmd deleted file mode 100644 index 764ae4bea2..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2.cmd +++ /dev/null @@ -1,75 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000080, length = 0x000380 - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x00007E /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2_far.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2_far.cmd deleted file mode 100644 index 976309764d..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_cpu2_far.cmd +++ /dev/null @@ -1,83 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000080, length = 0x000380 - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x00007E /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - EMIF1_CS0n : origin = 0x80000000, length = 0x10000000 - EMIF1_CS2n : origin = 0x00100000, length = 0x00200000 - EMIF1_CS3n : origin = 0x00300000, length = 0x00080000 - EMIF1_CS4n : origin = 0x00380000, length = 0x00060000 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 - - CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 - CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - - .farbss : > EMIF1_CS0n, PAGE = 1 - .farconst : > EMIF1_CS0n, PAGE = 1 - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - - /* The following section definitions are required when using the IPC API Drivers */ - GROUP : > CPU2TOCPU1RAM, PAGE = 1 - { - PUTBUFFER - PUTWRITEIDX - GETREADIDX - } - - GROUP : > CPU1TOCPU2RAM, PAGE = 1 - { - GETBUFFER : TYPE = DSECT - GETWRITEIDX : TYPE = DSECT - PUTREADIDX : TYPE = DSECT - } -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu1.cmd deleted file mode 100644 index d7f5abe0a1..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu1.cmd +++ /dev/null @@ -1,92 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000122, length = 0x0002DE - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 -} - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - Filter_RegsFile : > RAMGS0, PAGE = 1 - - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - SHARERAMGS2 : > RAMGS2, PAGE = 1 - SHARERAMGS3 : > RAMGS3, PAGE = 1 - SHARERAMGS4 : > RAMGS4, PAGE = 1 - SHARERAMGS5 : > RAMGS5, PAGE = 1 - SHARERAMGS6 : > RAMGS6, PAGE = 1 - SHARERAMGS7 : > RAMGS7, PAGE = 1 - SHARERAMGS8 : > RAMGS8, PAGE = 1 - SHARERAMGS9 : > RAMGS9, PAGE = 1 - SHARERAMGS10 : > RAMGS10, PAGE = 1 - SHARERAMGS11 : > RAMGS11, PAGE = 1 - SHARERAMGS12 : > RAMGS12, PAGE = 1 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - SHARERAMGS13 : > RAMGS13, PAGE = 1 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - SHARERAMGS14 : > RAMGS14, PAGE = 0 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - SHARERAMGS15 : > RAMGS15, PAGE = 0 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu2.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu2.cmd deleted file mode 100644 index da95201cf9..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_RAM_lnk_shared_cpu2.cmd +++ /dev/null @@ -1,92 +0,0 @@ - -MEMORY -{ -PAGE 0 : - /* BEGIN is used for the "boot to SARAM" bootloader mode */ - - BEGIN : origin = 0x000000, length = 0x000002 - RAMM0 : origin = 0x000080, length = 0x000380 - RAMD0 : origin = 0x00B000, length = 0x000800 - RAMLS0 : origin = 0x008000, length = 0x000800 - RAMLS1 : origin = 0x008800, length = 0x000800 - RAMLS2 : origin = 0x009000, length = 0x000800 - RAMLS3 : origin = 0x009800, length = 0x000800 - RAMLS4 : origin = 0x00A000, length = 0x000800 - RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RESET : origin = 0x3FFFC0, length = 0x000002 - -PAGE 1 : - - BOOT_RSVD : origin = 0x000002, length = 0x00007E /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAMD1 : origin = 0x00B800, length = 0x000800 - - RAMLS5 : origin = 0x00A800, length = 0x000800 - - RAMGS0 : origin = 0x00C000, length = 0x001000 - RAMGS1 : origin = 0x00D000, length = 0x001000 - RAMGS2 : origin = 0x00E000, length = 0x001000 - RAMGS3 : origin = 0x00F000, length = 0x001000 - RAMGS4 : origin = 0x010000, length = 0x001000 - RAMGS5 : origin = 0x011000, length = 0x001000 - RAMGS6 : origin = 0x012000, length = 0x001000 - RAMGS7 : origin = 0x013000, length = 0x001000 - RAMGS8 : origin = 0x014000, length = 0x001000 - RAMGS9 : origin = 0x015000, length = 0x001000 - RAMGS10 : origin = 0x016000, length = 0x001000 - RAMGS11 : origin = 0x017000, length = 0x001000 - RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - - CANA_MSG_RAM : origin = 0x049000, length = 0x000800 - CANB_MSG_RAM : origin = 0x04B000, length = 0x000800 -} - - -SECTIONS -{ - codestart : > BEGIN, PAGE = 0 - .text : >>RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4, PAGE = 0 - .cinit : > RAMM0, PAGE = 0 - .pinit : > RAMM0, PAGE = 0 - .switch : > RAMM0, PAGE = 0 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ - - .stack : > RAMM1, PAGE = 1 - .ebss : > RAMLS5, PAGE = 1 - .econst : > RAMLS5, PAGE = 1 - .esysmem : > RAMLS5, PAGE = 1 - - SHARERAMGS0 : > RAMGS0, PAGE = 1 - SHARERAMGS1 : > RAMGS1, PAGE = 1 - SHARERAMGS2 : > RAMGS2, PAGE = 1 - SHARERAMGS3 : > RAMGS3, PAGE = 1 - SHARERAMGS4 : > RAMGS4, PAGE = 1 - SHARERAMGS5 : > RAMGS5, PAGE = 1 - SHARERAMGS6 : > RAMGS6, PAGE = 1 - SHARERAMGS7 : > RAMGS7, PAGE = 1 - SHARERAMGS8 : > RAMGS8, PAGE = 1 - SHARERAMGS9 : > RAMGS9, PAGE = 1 - SHARERAMGS10 : > RAMGS10, PAGE = 1 - SHARERAMGS11 : > RAMGS11, PAGE = 1 - SHARERAMGS12 : > RAMGS12, PAGE = 1 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - SHARERAMGS13 : > RAMGS13, PAGE = 1 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - SHARERAMGS14 : > RAMGS14, PAGE = 0 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - SHARERAMGS15 : > RAMGS15, PAGE = 0 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ - -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - .TI.ramfunc : {} > RAMM0, PAGE = 0 - #else - ramfuncs : > RAMM0 PAGE = 0 - #endif -#endif - -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu1.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu1.cmd deleted file mode 100644 index ff0d4cb751..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu1.cmd +++ /dev/null @@ -1,68 +0,0 @@ - -/* this linker command file is to be included if user wants to use the DCSM feature on the device - * DCSM means Dual Zone Code Security Module. - * This linker command file works as an addendum ot the already existing Flash/RAM linker command file - * that the project has. - * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file - * NOTE - please note fill=0xFFFF, this helps if users include this file in the project by mistake and - * doesn't provide the needed proper *_ZoneSelectBlock.asm sources . - * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this. - * - * Once users are confident that they want to program the passwords in OTP, the DSECT section type can be removed. - * -*/ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - - /* Z1 OTP. LinkPointers */ - DCSM_OTP_Z1_LINKPOINTER : origin = 0x78000, length = 0x00000C - /* Z1 OTP. PSWDLOCK/RESERVED */ - DCSM_OTP_Z1_PSWDLOCK : origin = 0x78010, length = 0x000004 - /* Z1 OTP. CRCLOCK/RESERVED */ - DCSM_OTP_Z1_CRCLOCK : origin = 0x78014, length = 0x000004 - /* Z1 OTP. RESERVED/BOOTCTRL */ - DCSM_OTP_Z1_BOOTCTRL : origin = 0x7801C, length = 0x000004 - - /* DCSM Z1 Zone Select Contents (!!Movable!!) */ - /* Z1 OTP. Z1 password locations / Flash and RAM partitioning */ - DCSM_ZSEL_Z1_P0 : origin = 0x78020, length = 0x000010 - - /* Z2 OTP. LinkPointers */ - DCSM_OTP_Z2_LINKPOINTER : origin = 0x78200, length = 0x00000C - /* Z2 OTP. GPREG1/GPREG2 */ - DCSM_OTP_Z2_GPREG : origin = 0x7820C, length = 0x000004 - /* Z2 OTP. PSWDLOCK/RESERVED */ - DCSM_OTP_Z2_PSWDLOCK : origin = 0x78210, length = 0x000004 - /* Z2 OTP. CRCLOCK/RESERVED */ - DCSM_OTP_Z2_CRCLOCK : origin = 0x78214, length = 0x000004 - /* Z2 OTP. GPREG3/BOOTCTRL */ - DCSM_OTP_Z2_BOOTCTRL : origin = 0x7821C, length = 0x000004 - - /* DCSM Z1 Zone Select Contents (!!Movable!!) */ - /* Z2 OTP. Z2 password locations / Flash and RAM partitioning */ - DCSM_ZSEL_Z2_P0 : origin = 0x78220, length = 0x000010 - -} - -SECTIONS -{ - dcsm_otp_z1_linkpointer : > DCSM_OTP_Z1_LINKPOINTER PAGE = 0, type = DSECT - dcsm_otp_z1_pswdlock : > DCSM_OTP_Z1_PSWDLOCK PAGE = 0, type = DSECT - dcsm_otp_z1_crclock : > DCSM_OTP_Z1_CRCLOCK PAGE = 0, type = DSECT - dcsm_otp_z1_bootctrl : > DCSM_OTP_Z1_BOOTCTRL PAGE = 0, type = DSECT - dcsm_zsel_z1 : > DCSM_ZSEL_Z1_P0 PAGE = 0, type = DSECT - - dcsm_otp_z2_linkpointer : > DCSM_OTP_Z2_LINKPOINTER PAGE = 0, type = DSECT - dcsm_otp_z2_pswdlock : > DCSM_OTP_Z2_PSWDLOCK PAGE = 0, type = DSECT - dcsm_otp_z2_crclock : > DCSM_OTP_Z2_CRCLOCK PAGE = 0, type = DSECT - dcsm_otp_z2_bootctrl : > DCSM_OTP_Z2_BOOTCTRL PAGE = 0, type = DSECT - dcsm_zsel_z2 : > DCSM_ZSEL_Z2_P0 PAGE = 0, type = DSECT -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu2.cmd b/bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu2.cmd deleted file mode 100644 index 38111c8a18..0000000000 --- a/bsp/tms320f28379d/libraries/common/cmd/2837xD_dcsm_lnk_cpu2.cmd +++ /dev/null @@ -1,44 +0,0 @@ - -/* this linker command file is to be included if user wants to use the DCSM feature on the device - * DCSM means Dual Zone Code Security Module. - * This linker command file works as an addendum ot the already existing Flash/RAM linker command file - * that the project has. - * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file - * NOTEG - please note fill=0xFFFF, this helps if users include this file in the project by mistake and - * doesn't provide the needed *_ZoneSelectBlock.asm sources. - * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this. -*/ - -MEMORY -{ -PAGE 0 : /* Program Memory */ - - /* Part of Z1 OTP. LinkPointers/PSWD LOCK/CRC LOCK/JTAG lock/ Boot Ctrl */ - DCSM_OTP_Z1_P0 : origin = 0x78000, length = 0x000020 - /* Part of Z2 OTP. LinkPointers/PSWD LOCK/CRC LOCK/JTAG lock/ Boot Ctrl */ - DCSM_OTP_Z2_P0 : origin = 0x78200, length = 0x000020 - - /* DCSM Z1 Zone Select Contents (!!Movable!!) */ - /* Part of Z1 OTP. Z1 password locations / Flash and RAM partitioning */ - DCSM_ZSEL_Z1_P0 : origin = 0x78020, length = 0x000010 - - /* DCSM Z1 Zone Select Contents (!!Movable!!) */ - /* Part of Z2 OTP. Z2 password locations / Flash and RAM partitioning */ - DCSM_ZSEL_Z2_P0 : origin = 0x78220, length = 0x000010 -} - - -SECTIONS -{ - dcsm_otp_z1 : > DCSM_OTP_Z1_P0, PAGE = 0, type = DSECT - dcsm_otp_z2 : > DCSM_OTP_Z2_P0, PAGE = 0, type = DSECT - - dcsm_zsel_z1 : > DCSM_ZSEL_Z1_P0, PAGE = 0, type = DSECT - dcsm_zsel_z2 : > DCSM_ZSEL_Z2_P0, PAGE = 0, type = DSECT -} - -/* -//=========================================================================== -// End of file. -//=========================================================================== -*/ diff --git a/bsp/tms320f28379d/libraries/common/deprecated/Deprecated_F2837xD_DRL_UG.pdf b/bsp/tms320f28379d/libraries/common/deprecated/Deprecated_F2837xD_DRL_UG.pdf deleted file mode 100644 index 759a3d87ffaf53ba57fafa9d159ec6b83b062ee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348054 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%0A}<`a1k_E=;t+MSCk#aiebajCO(Y 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

3YJdH=WzqW+mIgL!ZKyh|S2_j` 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

Cpi&gX90rR^DZLbawtRAN99H5cq3>Bv% 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%0DTd{$sc`D#D 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 diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.c b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.c deleted file mode 100644 index 72343c5094..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.c +++ /dev/null @@ -1,1919 +0,0 @@ -//########################################################################### -// -// FILE: can.c -// -// TITLE: F2837xD CAN Initialization & Support Functions. -// -// NOTE: The CAN bus bridge uses a different addressing scheme in order to -// allow byte accesses. Because of this, 32-bit reads/writes can execute -// abnormally at higher optimization levels. The CAN driver functions -// have been adjusted to explicitly use two 16-bit read/writes to access -// the full 32-bit register where HWREGH(base + offset) represents the -// lower 16-bits and HWREGH(base + offset + 2) represents the upper -// 16-bits. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -//***************************************************************************** -//! \addtogroup can_api -//! @{ -//***************************************************************************** - -#include "F28x_Project.h" -#include -#include -#include "inc/hw_can.h" -#include "inc/hw_ints.h" -#include "inc/hw_memmap.h" -#include "inc/hw_types.h" -#include "driverlib/can.h" -#include "driverlib/debug.h" -#include "driverlib/interrupt.h" - -//***************************************************************************** -// This is the maximum number that can be stored as an 11bit Message -// identifier. -//***************************************************************************** -#define CAN_MAX_11BIT_MSG_ID (0x7ff) - -//***************************************************************************** -// This is used as the loop delay for accessing the CAN controller registers. -//***************************************************************************** - -// The maximum CAN bit timing divisor is 13. -#define CAN_MAX_BIT_DIVISOR (13) - -// The minimum CAN bit timing divisor is 5. -#define CAN_MIN_BIT_DIVISOR (5) - -// The maximum CAN pre-divisor is 1024. -#define CAN_MAX_PRE_DIVISOR (1024) - -// The minimum CAN pre-divisor is 1. -#define CAN_MIN_PRE_DIVISOR (1) - -//***************************************************************************** -// This table is used by the CANBitRateSet() API as the register defaults for -// the bit timing values. -//***************************************************************************** - -static const uint16_t g_ui16CANBitValues[] = -{ - 0x1100, // TSEG2 2, TSEG1 2, SJW 1, Divide 5 - 0x1200, // TSEG2 2, TSEG1 3, SJW 1, Divide 6 - 0x2240, // TSEG2 3, TSEG1 3, SJW 2, Divide 7 - 0x2340, // TSEG2 3, TSEG1 4, SJW 2, Divide 8 - 0x3340, // TSEG2 4, TSEG1 4, SJW 2, Divide 9 - 0x3440, // TSEG2 4, TSEG1 5, SJW 2, Divide 10 - 0x3540, // TSEG2 4, TSEG1 6, SJW 2, Divide 11 - 0x3640, // TSEG2 4, TSEG1 7, SJW 2, Divide 12 - 0x3740 // TSEG2 4, TSEG1 8, SJW 2, Divide 13 -}; - -//***************************************************************************** -//! \internal -//! Checks a CAN base address. -//! -//! \param ui32Base is the base address of the CAN controller. -//! -//! This function determines if a CAN controller base address is valid. -//! -//! \return Returns \b true if the base address is valid and \b false -//! otherwise. -// -//***************************************************************************** -#ifdef DEBUG -static bool -CANBaseValid(uint32_t ui32Base) -{ - return((ui32Base == CANA_BASE) || (ui32Base == CANB_BASE)); -} - -#endif - -//***************************************************************************** -//! \internal -//! -//! Returns the CAN controller interrupt number. -//! -//! \param ui32Base is the base address of the selected CAN controller -//! \param ucNumber is the interrupt line number requested, valid values are 0 -//! or 1 -//! -//! Given a CAN controller base address and interrupt line number, returns the -//! corresponding interrupt number. -//! -//! \return Returns a CAN interrupt number, or -1 if \e ui32Port is invalid. -// -//***************************************************************************** -static int32_t -CANIntNumberGet(uint32_t ui32Base, unsigned char ucNumber) -{ - int32_t lIntNumber; - - // Return the interrupt number for the given CAN controller. - switch(ui32Base) - { - // Return the interrupt number for CAN 0 - case CANA_BASE: - { - switch(ucNumber) - { - case 0: - { - lIntNumber = INT_CANA_0; - break; - } - case 1: - { - lIntNumber = INT_CANA_1; - break; - - } - default: - { - lIntNumber = -1; - break; - } - } - break; - } - - // Return the interrupt number for CAN 1 - case CANB_BASE: - { - switch(ucNumber) - { - case 0: - { - lIntNumber = INT_CANB_0; - break; - } - case 1: - { - lIntNumber = INT_CANB_1; - break; - - } - default: - { - lIntNumber = -1; - break; - } - } - break; - } - - // Return -1 to indicate a bad address was passed in. - default: - { - lIntNumber = -1; - } - } - return(lIntNumber); -} - -//***************************************************************************** -//! \internal -//! -//! Copies data from a buffer to the CAN Data registers. -//! -//! \param pucData is a pointer to the data to be written out to the CAN -//! controller's data registers. -//! \param pui32Register is an uint32_t pointer to the first register of the -//! CAN controller's data registers. For example, in order to use the IF1 -//! register set on CAN controller A, the value would be: \b CANA_BASE \b + -//! \b CAN_O_IF1DATA. -//! \param iSize is the number of bytes to copy into the CAN controller. -//! -//! This function takes the steps necessary to copy data from a contiguous -//! buffer in memory into the non-contiguous data registers used by the CAN -//! controller. This function is rarely used outside of the CANMessageSet() -//! function. -//! -//! This function replaces the original CANWriteDataReg() API and performs the -//! same actions. A macro is provided in can.h to map the original -//! API to this API. -//! -//! \return None. -// -//***************************************************************************** -static void -CANDataRegWrite(unsigned char *pucData, uint32_t *pui32Register, int16_t iSize) -{ - int16_t iIdx; - unsigned char * pucRegister = (unsigned char *) pui32Register; - - // Loop always copies 1 or 2 bytes per iteration. - for(iIdx = 0; iIdx < iSize; iIdx++ ) - { - // Write out the data 8 bits at a time. - HWREGB(pucRegister++) = pucData[iIdx]; - } -} - -//***************************************************************************** -//! \internal -//! -//! Copies data from a buffer to the CAN Data registers. -//! -//! \param pucData is a pointer to the location to store the data read from the -//! CAN controller's data registers. -//! \param pui32Register is an uint32_t pointer to the first register of the -//! CAN controller's data registers. For example, in order to use the IF1 -//! register set on CAN controller A, the value would be: \b CANA_BASE \b + -//! \b CAN_O_IF1DATA. -//! \param iSize is the number of bytes to copy from the CAN controller. -//! -//! This function takes the steps necessary to copy data to a contiguous buffer -//! in memory from the non-contiguous data registers used by the CAN -//! controller. This function is rarely used outside of the CANMessageGet() -//! function. -//! -//! This function replaces the original CANReadDataReg() API and performs the -//! same actions. A macro is provided in can.h to map the original -//! API to this API. -//! -//! \return None. -// -//***************************************************************************** -static void -CANDataRegRead(unsigned char *pucData, uint32_t *pui32Register, int16_t iSize) -{ - int16_t iIdx; - unsigned char * pucRegister = (unsigned char *) pui32Register; - - // Loop always copies 1 or 2 bytes per iteration. - for(iIdx = 0; iIdx < iSize; iIdx++ ) - { - // Read out the data - pucData[iIdx] = HWREGB(pucRegister++); - } -} - -//***************************************************************************** -// -//! Initializes the CAN controller after reset. -//! -//! \param ui32Base is the base address of the CAN controller. -//! -//! After reset, the CAN controller is left in the disabled state. However, -//! the memory used for message objects contains undefined values and must be -//! cleared prior to enabling the CAN controller the first time. This prevents -//! unwanted transmission or reception of data before the message objects are -//! configured. This function must be called before enabling the controller -//! the first time. -//! -//! \return None. -// -//***************************************************************************** -void -CANInit(uint32_t ui32Base) -{ - int16_t iMsg; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Place CAN controller in init state, regardless of previous state. This - // will put controller in idle, and allow the message object RAM to be - // programmed. - - HWREGH(ui32Base + CAN_O_CTL) = CAN_CTL_INIT; - HWREGH(ui32Base + CAN_O_CTL) = CAN_CTL_SWR; - - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - - // Clear the message value bit in the arbitration register. This indicates - // the message is not valid and is a "safe" condition to leave the message - // object. The same arb reg is used to program all the message objects. - HWREGH(ui32Base + CAN_O_IF1CMD + 2) = (CAN_IF1CMD_DIR | CAN_IF1CMD_ARB | - CAN_IF1CMD_CONTROL) >> 16; - HWREGH(ui32Base + CAN_O_IF1ARB) = 0; - HWREGH(ui32Base + CAN_O_IF1ARB + 2) = 0; - - HWREGH(ui32Base + CAN_O_IF1MCTL) = 0; - HWREGH(ui32Base + CAN_O_IF1MCTL + 2) = 0; - - HWREGH(ui32Base + CAN_O_IF2CMD + 2) = (CAN_IF2CMD_DIR | CAN_IF2CMD_ARB | - CAN_IF2CMD_CONTROL) >> 16; - HWREGH(ui32Base + CAN_O_IF2ARB) = 0; - HWREGH(ui32Base + CAN_O_IF2ARB + 2) = 0; - - HWREGH(ui32Base + CAN_O_IF2MCTL) = 0; - HWREGH(ui32Base + CAN_O_IF2MCTL + 2) = 0; - - // Loop through to program all 32 message objects - for(iMsg = 1; iMsg <= 32; iMsg+=2) - { - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - - // Initiate programming the message object - HWREGH(ui32Base + CAN_O_IF1CMD) = iMsg; - - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF2CMD) & CAN_IF2CMD_BUSY) - { - } - - // Initiate programming the message object - HWREGH(ui32Base + CAN_O_IF2CMD) = iMsg + 1; - } - - // Make sure that the interrupt and new data flags are updated for the - // message objects. - HWREGH(ui32Base + CAN_O_IF1CMD + 2) = (CAN_IF1CMD_TXRQST | - CAN_IF1CMD_CLRINTPND) >> 16; - HWREGH(ui32Base + CAN_O_IF2CMD + 2) = (CAN_IF2CMD_TXRQST | - CAN_IF2CMD_CLRINTPND) >> 16; - - // Loop through to program all 32 message objects - for(iMsg = 1; iMsg <= 32; iMsg+=2) - { - // Wait for busy bit to clear. - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - - // Initiate programming the message object - HWREGH(ui32Base + CAN_O_IF1CMD) = iMsg; - - // Wait for busy bit to clear. - while(HWREGH(ui32Base + CAN_O_IF2CMD) & CAN_IF2CMD_BUSY) - { - } - - // Initiate programming the message object - HWREGH(ui32Base + CAN_O_IF2CMD) = iMsg + 1; - } - - // Acknowledge any pending status interrupts. - HWREG(ui32Base + CAN_O_ES); -} - -//***************************************************************************** -// -//! Enables the CAN controller. -//! -//! \param ui32Base is the base address of the CAN controller to enable. -//! -//! Enables the CAN controller for message processing. Once enabled, the -//! controller will automatically transmit any pending frames, and process any -//! received frames. The controller can be stopped by calling CANDisable(). -//! Prior to calling CANEnable(), CANInit() should have been called to -//! initialize the controller and the CAN bus clock should be configured by -//! calling CANBitTimingSet(). -//! -//! \return None. -// -//***************************************************************************** -void -CANEnable(uint32_t ui32Base) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Clear the init bit in the control register. - HWREGH(ui32Base + CAN_O_CTL) = HWREGH(ui32Base + CAN_O_CTL) & - ~CAN_CTL_INIT; -} - -//***************************************************************************** -// -//! Disables the CAN controller. -//! -//! \param ui32Base is the base address of the CAN controller to disable. -//! -//! Disables the CAN controller for message processing. When disabled, the -//! controller will no longer automatically process data on the CAN bus. The -//! controller can be restarted by calling CANEnable(). The state of the CAN -//! controller and the message objects in the controller are left as they were -//! before this call was made. -//! -//! \return None. -// -//***************************************************************************** -void -CANDisable(uint32_t ui32Base) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Set the init bit in the control register. - HWREGH(ui32Base + CAN_O_CTL) = HWREGH(ui32Base + CAN_O_CTL) | - CAN_CTL_INIT; -} - -//***************************************************************************** -// -//! Select CAN peripheral clock source -//! -//! \param ui32Base is the base address of the CAN controller to disable. -//! \param ui16Source is the clock source to select for the given CAN -//! peripheral: \n -//! 0 - Selected CPU SYSCLKOUT (CPU1.Sysclk or CPU2.Sysclk) -//! (default at reset) \n -//! 1 - External Oscillator (OSC) clock (direct from X1/X2) \n -//! 2 - AUXCLKIN = GPIOn(GPIO19) -//! -//! Selects the desired clock source for use with a given CAN peripheral. -//! -//! \return None. -// -//***************************************************************************** -void CANClkSourceSelect(uint32_t ui32Base, uint16_t ui16Source) -{ - EALLOW; - switch(ui32Base) - { - case CANA_BASE: - { - ClkCfgRegs.CLKSRCCTL2.bit.CANABCLKSEL = ui16Source; - } - - case CANB_BASE: - { - ClkCfgRegs.CLKSRCCTL2.bit.CANBBCLKSEL = ui16Source; - } - - default: - break; - } - EDIS; -} - -//***************************************************************************** -// -//! Reads the current settings for the CAN controller bit timing. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param pClkParms is a pointer to a structure to hold the timing parameters. -//! -//! This function reads the current configuration of the CAN controller bit -//! clock timing, and stores the resulting information in the structure -//! supplied by the caller. Refer to CANBitTimingSet() for the meaning of the -//! values that are returned in the structure pointed to by \e pClkParms. -//! -//! This function replaces the original CANGetBitTiming() API and performs the -//! same actions. A macro is provided in can.h to map the original -//! API to this API. -//! -//! \return None. -// -//***************************************************************************** -void -CANBitTimingGet(uint32_t ui32Base, tCANBitClkParms *pClkParms) -{ - uint32_t uBitReg; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT(pClkParms != 0); - - uBitReg = HWREG(ui32Base + CAN_O_BTR); - - // Set the phase 2 segment. - pClkParms->uPhase2Seg = ((uBitReg & CAN_BTR_TSEG2_M) >> 12) + 1; - - // Set the phase 1 segment. - pClkParms->uSyncPropPhase1Seg = ((uBitReg & CAN_BTR_TSEG1_M) >> 8) + 1; - - // Set the synchronous jump width. - pClkParms->uSJW = ((uBitReg & CAN_BTR_SJW_M) >> 6) + 1; - - // Set the pre-divider for the CAN bus bit clock. - pClkParms->uQuantumPrescaler = ((uBitReg & CAN_BTR_BRP_M) | - ((uBitReg & CAN_BTR_BRPE_M) >> 10)) + 1; -} - -//***************************************************************************** -// -//! This function is used to set the CAN bit timing values to a nominal setting -//! based on a desired bit rate. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32SourceClock is the clock frequency for the CAN peripheral in Hz. -//! \param ui32BitRate is the desired bit rate. -//! -//! This function will set the CAN bit timing for the bit rate passed in the -//! \e ui32BitRate parameter based on the \e ui32SourceClock parameter. The CAN -//! bit clock is calculated to be an average timing value that should work for -//! most systems. If tighter timing requirements are needed, then the -//! CANBitTimingSet() function is available for full customization of all of -//! the CAN bit timing values. Since not all bit rates can be matched -//! exactly, the bit rate is set to the value closest to the desired bit rate -//! without being higher than the \e ui32BitRate value. -//! -//! \return This function returns the bit rate that the CAN controller was -//! configured to use or it returns 0 to indicate that the bit rate was not -//! changed because the requested bit rate was not valid. -// -//***************************************************************************** -uint32_t -CANBitRateSet(uint32_t ui32Base, uint32_t ui32SourceClock, uint32_t ui32BitRate) -{ - uint32_t ui32DesiredRatio; - uint32_t ui32CANBits; - uint32_t ui32PreDivide; - uint32_t ui32RegValue; - uint16_t ui16CANCTL; - - ASSERT(ui32BitRate != 0); - - // Calculate the desired clock rate. - ui32DesiredRatio = ui32SourceClock / ui32BitRate; - - // If the ratio of CAN bit rate to processor clock is too small or too - // large then return 0 indicating that no bit rate was set. - ASSERT(ui32DesiredRatio <= (CAN_MAX_PRE_DIVISOR * CAN_MAX_BIT_DIVISOR)); - ASSERT(ui32DesiredRatio >= (CAN_MIN_PRE_DIVISOR * CAN_MIN_BIT_DIVISOR)); - - // Make sure that the Desired Ratio is not too large. This enforces the - // requirement that the bit rate is larger than requested. - if((ui32SourceClock / ui32DesiredRatio) > ui32BitRate) - { - ui32DesiredRatio += 1; - } - - // Check all possible values to find a matching value. - while(ui32DesiredRatio <= CAN_MAX_PRE_DIVISOR * CAN_MAX_BIT_DIVISOR) - { - // Loop through all possible CAN bit divisors. - for(ui32CANBits = CAN_MAX_BIT_DIVISOR; - ui32CANBits >= CAN_MIN_BIT_DIVISOR; - ui32CANBits--) - { - // For a given CAN bit divisor save the pre divisor. - ui32PreDivide = ui32DesiredRatio / ui32CANBits; - - // If the calculated divisors match the desired clock ratio then - // return these bit rate and set the CAN bit timing. - if((ui32PreDivide * ui32CANBits) == ui32DesiredRatio) - { - // Start building the bit timing value by adding the bit timing - // in time quanta. - ui32RegValue = - g_ui16CANBitValues[ui32CANBits - CAN_MIN_BIT_DIVISOR]; - - // To set the bit timing register, the controller must be - // placed - // in init mode (if not already), and also configuration change - // bit enabled. The state of the register should be saved - // so it can be restored. - - ui16CANCTL = HWREGH(ui32Base + CAN_O_CTL); - HWREGH(ui32Base + CAN_O_CTL) = ui16CANCTL | CAN_CTL_INIT | - CAN_CTL_CCE; - - // Now add in the pre-scalar on the bit rate. - ui32RegValue |= ((ui32PreDivide - 1) & CAN_BTR_BRP_M) | - (((ui32PreDivide - 1) << 10) & CAN_BTR_BRPE_M); - - // Set the clock bits in the and the bits of the - // pre-scalar. - HWREGH(ui32Base + CAN_O_BTR) = (ui32RegValue & - CAN_REG_WORD_MASK); - HWREGH(ui32Base + CAN_O_BTR + 2) = (ui32RegValue >> 16); - - // Restore the saved CAN Control register. - HWREGH(ui32Base + CAN_O_CTL) = ui16CANCTL; - - // Return the computed bit rate. - return(ui32SourceClock / ( ui32PreDivide * ui32CANBits)); - } - } - - // Move the divisor up one and look again. Only in rare cases are - // more than 2 loops required to find the value. - ui32DesiredRatio++; - } - return(0); -} - -//***************************************************************************** -// -//! Configures the CAN controller bit timing. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param pClkParms points to the structure with the clock parameters. -//! -//! Configures the various timing parameters for the CAN bus bit timing: -//! Propagation segment, Phase Buffer 1 segment, Phase Buffer 2 segment, and -//! the Synchronization Jump Width. The values for Propagation and Phase -//! Buffer 1 segments are derived from the combination -//! \e pClkParms->uSyncPropPhase1Seg parameter. Phase Buffer 2 is determined -//! from the \e pClkParms->uPhase2Seg parameter. These two parameters, along -//! with \e pClkParms->uSJW are based in units of bit time quanta. The actual -//! quantum time is determined by the \e pClkParms->uQuantumPrescaler value, -//! which specifies the divisor for the CAN module clock. -//! -//! The total bit time, in quanta, will be the sum of the two Seg parameters, -//! as follows: -//! -//! bit_time_q = uSyncPropPhase1Seg + uPhase2Seg + 1 -//! -//! Note that the Sync_Seg is always one quantum in duration, and will be added -//! to derive the correct duration of Prop_Seg and Phase1_Seg. -//! -//! The equation to determine the actual bit rate is as follows: -//! -//! CAN Clock / -//! ((\e uSyncPropPhase1Seg + \e uPhase2Seg + 1) * (\e uQuantumPrescaler)) -//! -//! This means that with \e uSyncPropPhase1Seg = 4, \e uPhase2Seg = 1, -//! \e uQuantumPrescaler = 2 and an 8 MHz CAN clock, that the bit rate will be -//! (8 MHz) / ((5 + 2 + 1) * 2) or 500 Kbit/sec. -//! -//! \return None. -// -//***************************************************************************** -void -CANBitTimingSet(uint32_t ui32Base, tCANBitClkParms *pClkParms) -{ - uint32_t uBitReg; - uint16_t uSavedInit; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT(pClkParms != 0); - - // The phase 1 segment must be in the range from 2 to 16. - ASSERT((pClkParms->uSyncPropPhase1Seg >= 2) && - (pClkParms->uSyncPropPhase1Seg <= 16)); - - // The phase 2 segment must be in the range from 1 to 8. - ASSERT((pClkParms->uPhase2Seg >= 1) && (pClkParms->uPhase2Seg <= 8)); - - // The synchronous jump windows must be in the range from 1 to 4. - ASSERT((pClkParms->uSJW >= 1) && (pClkParms->uSJW <= 4)); - - // The CAN clock pre-divider must be in the range from 1 to 1024. - ASSERT((pClkParms->uQuantumPrescaler <= 1024) && - (pClkParms->uQuantumPrescaler >= 1)); - - // To set the bit timing register, the controller must be placed in init - // mode (if not already), and also configuration change bit enabled. State - // of the init bit should be saved so it can be restored at the end. - uSavedInit = HWREGH(ui32Base + CAN_O_CTL); - HWREGH(ui32Base + CAN_O_CTL) = uSavedInit | CAN_CTL_INIT | CAN_CTL_CCE; - - // Set the bit fields of the bit timing register according to the parms. - uBitReg = ((pClkParms->uPhase2Seg - 1) << 12) & CAN_BTR_TSEG2_M; - uBitReg |= ((pClkParms->uSyncPropPhase1Seg - 1) << 8) & CAN_BTR_TSEG1_M; - uBitReg |= ((pClkParms->uSJW - 1) << 6) & CAN_BTR_SJW_M; - uBitReg |= (pClkParms->uQuantumPrescaler - 1) & CAN_BTR_BRP_M; - uBitReg |= ((pClkParms->uQuantumPrescaler - 1) << 10)& CAN_BTR_BRPE_M; - HWREGH(ui32Base + CAN_O_BTR) = uBitReg & CAN_REG_WORD_MASK; - HWREGH(ui32Base + CAN_O_BTR + 2) = uBitReg >> 16; - - // Clear the config change bit, and restore the init bit. - uSavedInit &= ~CAN_CTL_CCE; - - // If Init was not set before, then clear it. - if(uSavedInit & CAN_CTL_INIT) - { - uSavedInit &= ~CAN_CTL_INIT; - } - HWREGH(ui32Base + CAN_O_CTL) = uSavedInit; -} - -//***************************************************************************** -// -//! Registers an interrupt handler for the CAN controller. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ucIntNumber is the interrupt line to register (0 or 1). -//! \param pfnHandler is a pointer to the function to be called when the -//! enabled CAN interrupts occur. -//! -//! This function registers the interrupt handler in the interrupt vector -//! table, and enables CAN interrupts on the interrupt controller; specific CAN -//! interrupt sources must be enabled using CANIntEnable(). The interrupt -//! handler being registered must clear the source of the interrupt using -//! CANIntClear(). -//! -//! If the application is using a static interrupt vector table stored in -//! flash, then it is not necessary to register the interrupt handler this way. -//! Instead, IntEnable() should be used to enable CAN interrupts on the -//! interrupt controller. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -CANIntRegister(uint32_t ui32Base, unsigned char ucIntNumber, - void (*pfnHandler)(void)) -{ - uint32_t ui32IntNumber; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Get the actual interrupt number for this CAN controller. - ui32IntNumber = CANIntNumberGet(ui32Base, ucIntNumber); - - // Register the interrupt handler. - IntRegister(ui32IntNumber, pfnHandler); - - // Enable the CAN interrupt. - IntEnable(ui32IntNumber); -} - -//***************************************************************************** -//! Unregisters an interrupt handler for the CAN controller. -//! -//! \param ui32Base is the base address of the controller. -//! \param ucIntNumber is the interrupt line to un-register (0 or 1). -//! -//! This function unregisters the previously registered interrupt handler and -//! disables the interrupt on the interrupt controller. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -CANIntUnregister(uint32_t ui32Base, unsigned char ucIntNumber) -{ - uint32_t ui32IntNumber; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Get the actual interrupt number for this CAN controller. - ui32IntNumber = CANIntNumberGet(ui32Base, ucIntNumber); - - // Register the interrupt handler. - IntUnregister(ui32IntNumber); - - // Disable the CAN interrupt. - IntDisable(ui32IntNumber); -} - -//***************************************************************************** -// -//! Enables individual CAN controller interrupt sources. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be enabled. -//! -//! Enables specific interrupt sources of the CAN controller. Only enabled -//! sources will cause a processor interrupt. -//! -//! The \e ui32IntFlags parameter is the logical OR of any of the following: -//! -//! - \b CAN_INT_ERROR - a controller error condition has occurred -//! - \b CAN_INT_STATUS - a message transfer has completed, or a bus error has -//! been detected -//! - \b CAN_INT_IE0 - allow CAN controller to generate interrupts on interrupt -//! line 0 -//! - \b CAN_INT_IE1 - allow CAN controller to generate interrupts on interrupt -//! line 1 -//! -//! In order to generate status or error interrupts, \b CAN_INT_IE0 must be -//! enabled. -//! Further, for any particular transaction from a message object to generate -//! an interrupt, that message object must have interrupts enabled (see -//! CANMessageSet()). \b CAN_INT_ERROR will generate an interrupt if the -//! controller enters the ``bus off'' condition, or if the error counters reach -//! a limit. \b CAN_INT_STATUS will generate an interrupt under quite a few -//! status conditions and may provide more interrupts than the application -//! needs to handle. When an interrupt occurs, use CANIntStatus() to determine -//! the cause. -//! -//! \return None. -// -//***************************************************************************** -void -CANIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntFlags & ~(CAN_INT_ERROR | CAN_INT_STATUS | CAN_INT_IE0 | - CAN_INT_IE1)) == 0); - - // Enable the specified interrupts. - HWREGH(ui32Base + CAN_O_CTL) = (HWREGH(ui32Base + CAN_O_CTL) | - (ui32IntFlags & CAN_REG_WORD_MASK)); - - HWREGH(ui32Base + CAN_O_CTL + 2) = (HWREGH(ui32Base + CAN_O_CTL + 2) | - (ui32IntFlags >> 16)); -} - -//***************************************************************************** -// -//! Disables individual CAN controller interrupt sources. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be disabled. -//! -//! Disables the specified CAN controller interrupt sources. Only enabled -//! interrupt sources can cause a processor interrupt. -//! -//! The \e ui32IntFlags parameter has the same definition as in the -//! CANIntEnable() function. -//! -//! \return None. -// -//***************************************************************************** -void -CANIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntFlags & ~(CAN_INT_ERROR | CAN_INT_STATUS | CAN_INT_IE0 | - CAN_INT_IE1)) == 0); - - // Disable the specified interrupts. - HWREGH(ui32Base + CAN_O_CTL) = HWREGH(ui32Base + CAN_O_CTL) & - ~(ui32IntFlags & CAN_REG_WORD_MASK); - - HWREGH(ui32Base + CAN_O_CTL + 2) = HWREGH(ui32Base + CAN_O_CTL + 2) & - ~(ui32IntFlags >> 16); -} - -//***************************************************************************** -// -//! Returns the current CAN controller interrupt status. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param eIntStsReg indicates which interrupt status register to read -//! -//! Returns the value of one of two interrupt status registers. The interrupt -//! status register read is determined by the \e eIntStsReg parameter, which -//! can have one of the following values: -//! -//! - \b CAN_INT_STS_CAUSE - indicates the cause of the interrupt -//! - \b CAN_INT_STS_OBJECT - indicates pending interrupts of all message -//! objects -//! -//! \b CAN_INT_STS_CAUSE returns the value of the controller interrupt register -//! and indicates the cause of the interrupt. It will be a value of -//! \b CAN_INT_INT0ID_STATUS if the cause is a status interrupt. In this case, -//! the status register should be read with the CANStatusGet() function. -//! Calling this function to read the status will also clear the status -//! interrupt. If the value of the interrupt register is in the range 1-32, -//! then this indicates the number of the highest priority message object that -//! has an interrupt pending. The message object interrupt can be cleared by -//! using the CANIntClear() function, or by reading the message using -//! CANMessageGet() in the case of a received message. The interrupt handler -//! can read the interrupt status again to make sure all pending interrupts are -//! cleared before returning from the interrupt. -//! -//! \b CAN_INT_STS_OBJECT returns a bit mask indicating which message objects -//! have pending interrupts. This can be used to discover all of the pending -//! interrupts at once, as opposed to repeatedly reading the interrupt register -//! by using \b CAN_INT_STS_CAUSE. -//! -//! \return Returns the value of one of the interrupt status registers. -// -//***************************************************************************** -uint32_t -CANIntStatus(uint32_t ui32Base, tCANIntStsReg eIntStsReg) -{ - uint32_t ui32Status; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // See which status the caller is looking for. - switch(eIntStsReg) - { - // The caller wants the global interrupt status for the CAN controller - // specified by ui32Base. - case CAN_INT_STS_CAUSE: - { - ui32Status = HWREG(ui32Base + CAN_O_INT); - break; - } - - // The caller wants the current message status interrupt for all - // messages. - case CAN_INT_STS_OBJECT: - { - // Read message object interrupt status - ui32Status = HWREG(ui32Base + CAN_O_IPEN_21); - break; - } - - // Request was for unknown status so just return 0. - default: - { - ui32Status = 0; - break; - } - } - // Return the interrupt status value - return(ui32Status); -} - -//***************************************************************************** -// -//! Clears a CAN interrupt source. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntClr is a value indicating which interrupt source to clear. -//! -//! This function can be used to clear a specific interrupt source. The -//! \e ui32IntClr parameter should be one of the following values: -//! -//! - \b CAN_INT_INTID_STATUS - Clears a status interrupt. -//! - 1-32 - Clears the specified message object interrupt -//! -//! It is not necessary to use this function to clear an interrupt. This -//! should only be used if the application wants to clear an interrupt source -//! without taking the normal interrupt action. -//! -//! Normally, the status interrupt is cleared by reading the controller status -//! using CANStatusGet(). A specific message object interrupt is normally -//! cleared by reading the message object using CANMessageGet(). -//! -//! \return None. -// -//***************************************************************************** -void -CANIntClear(uint32_t ui32Base, uint32_t ui32IntClr) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntClr == CAN_INT_INT0ID_STATUS) || - ((ui32IntClr>=1) && (ui32IntClr <=32))); - - if(ui32IntClr == CAN_INT_INT0ID_STATUS) - { - // Simply read and discard the status to clear the interrupt. - HWREG(ui32Base + CAN_O_ES); - } - else - { - // Wait to be sure that this interface is not busy. - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - - // Only change the interrupt pending state by setting only the - // CAN_IF1CMD_CLRINTPND bit. - HWREGH(ui32Base + CAN_O_IF1CMD + 2) = CAN_IF1CMD_CLRINTPND >> 16; - - // Send the clear pending interrupt command to the CAN controller. - HWREGH(ui32Base + CAN_O_IF1CMD) = ui32IntClr & CAN_IF1CMD_MSG_NUM_M; - - // Wait to be sure that this interface is not busy. - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - } -} - -//***************************************************************************** -// -//! Sets the CAN controller automatic retransmission behavior. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param bAutoRetry enables automatic retransmission. -//! -//! Enables or disables automatic retransmission of messages with detected -//! errors. If \e bAutoRetry is \b true, then automatic retransmission is -//! enabled, otherwise it is disabled. -//! -//! \return None. -// -//***************************************************************************** -void -CANRetrySet(uint32_t ui32Base, bool bAutoRetry) -{ - uint16_t ui16CtlReg; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - ui16CtlReg = HWREGH(ui32Base + CAN_O_CTL); - - // Conditionally set the DAR bit to enable/disable auto-retry. - if(bAutoRetry) - { - // Clearing the DAR bit tells the controller to not disable the - // auto-retry of messages which were not transmitted or received - // correctly. - ui16CtlReg &= ~CAN_CTL_DAR; - } - else - { - // Setting the DAR bit tells the controller to disable the auto-retry - // of messages which were not transmitted or received correctly. - ui16CtlReg |= CAN_CTL_DAR; - } - - HWREGH(ui32Base + CAN_O_CTL) = ui16CtlReg; -} - -//***************************************************************************** -// -//! Returns the current setting for automatic retransmission. -//! -//! \param ui32Base is the base address of the CAN controller. -//! -//! Reads the current setting for the automatic retransmission in the CAN -//! controller and returns it to the caller. -//! -//! \return Returns \b true if automatic retransmission is enabled, \b false -//! otherwise. -// -//***************************************************************************** -bool -CANRetryGet(uint32_t ui32Base) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Read the disable automatic retry setting from the CAN controller. - if(HWREGH(ui32Base + CAN_O_CTL) & CAN_CTL_DAR) - { - // Automatic data retransmission is not enabled. - return(false); - } - - // Automatic data retransmission is enabled. - return(true); -} - -//***************************************************************************** -// -//! Reads one of the controller status registers. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param eStatusReg is the status register to read. -//! -//! Reads a status register of the CAN controller and returns it to the caller. -//! The different status registers are: -//! -//! - \b CAN_STS_CONTROL - the main controller status -//! - \b CAN_STS_TXREQUEST - bit mask of objects pending transmission -//! - \b CAN_STS_NEWDAT - bit mask of objects with new data -//! - \b CAN_STS_MSGVAL - bit mask of objects with valid configuration -//! -//! When reading the main controller status register, a pending status -//! interrupt will be cleared. This should be used in the interrupt handler -//! for the CAN controller if the cause is a status interrupt. The controller -//! status register fields are as follows: -//! -//! - \b CAN_STATUS_PDA - controller in local power down mode -//! - \b CAN_STATUS_WAKE_UP - controller initiated system wake up -//! - \b CAN_STATUS_PERR - parity error detected -//! - \b CAN_STATUS_BUS_OFF - controller is in bus-off condition -//! - \b CAN_STATUS_EWARN - an error counter has reached a limit of at least 96 -//! - \b CAN_STATUS_EPASS - CAN controller is in the error passive state -//! - \b CAN_STATUS_RXOK - a message was received successfully (independent of -//! any message filtering). -//! - \b CAN_STATUS_TXOK - a message was successfully transmitted -//! - \b CAN_STATUS_LEC_NONE - no error -//! - \b CAN_STATUS_LEC_STUFF - stuffing error detected -//! - \b CAN_STATUS_LEC_FORM - a format error occurred in the fixed format part -//! of a message -//! - \b CAN_STATUS_LEC_ACK - a transmitted message was not acknowledged -//! - \b CAN_STATUS_LEC_BIT1 - dominant level detected when trying to send in -//! recessive mode -//! - \b CAN_STATUS_LEC_BIT0 - recessive level detected when trying to send in -//! dominant mode -//! - \b CAN_STATUS_LEC_CRC - CRC error in received message -//! -//! The remaining status registers are 32-bit bit maps to the message objects. -//! They can be used to quickly obtain information about the status of all the -//! message objects without needing to query each one. They contain the -//! following information: -//! -//! - \b CAN_STS_TXREQUEST - if a message object's TxRequest bit is set, that -//! means that a transmission is pending on that object. The application can -//! use this to determine which objects are still waiting to send a message. -//! - \b CAN_STS_NEWDAT - if a message object's NewDat bit is set, that means -//! that a new message has been received in that object, and has not yet been -//! picked up by the host application -//! - \b CAN_STS_MSGVAL - if a message object's MsgVal bit is set, that means -//! it has a valid configuration programmed. The host application can use this -//! to determine which message objects are empty/unused. -//! -//! \return Returns the value of the status register. -// -//***************************************************************************** -uint32_t -CANStatusGet(uint32_t ui32Base, tCANStsReg eStatusReg) -{ - uint32_t ui32Status; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - switch(eStatusReg) - { - // Just return the global CAN status register since that is what was - // requested. - case CAN_STS_CONTROL: - { - ui32Status = HWREG(ui32Base + CAN_O_ES); - break; - } - - // Return objects with valid transmit requests - case CAN_STS_TXREQUEST: - { - ui32Status = HWREG(ui32Base + CAN_O_TXRQ_21); - break; - } - - // Return messages objects with new data - case CAN_STS_NEWDAT: - { - ui32Status = HWREG(ui32Base + CAN_O_NDAT_21); - break; - } - - // Return valid message objects - case CAN_STS_MSGVAL: - { - ui32Status = HWREG(ui32Base + CAN_O_MVAL_21); - break; - } - - // Unknown CAN status requested so return 0. - default: - { - ui32Status = 0; - break; - } - } - return(ui32Status); -} - -//***************************************************************************** -// -//! Reads the CAN controller error counter register. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param pui32RxCount is a pointer to storage for the receive error counter. -//! \param pui32TxCount is a pointer to storage for the transmit error counter. -//! -//! Reads the error counter register and returns the transmit and receive error -//! counts to the caller along with a flag indicating if the controller receive -//! counter has reached the error passive limit. The values of the receive and -//! transmit error counters are returned through the pointers provided as -//! parameters. -//! -//! After this call, \e *pui32RxCount will hold the current receive error count -//! and \e *pui32TxCount will hold the current transmit error count. -//! -//! \return Returns \b true if the receive error count has reached the error -//! passive limit, and \b false if the error count is below the error passive -//! limit. -// -//***************************************************************************** -bool -CANErrCntrGet(uint32_t ui32Base, uint32_t *pui32RxCount, - uint32_t *pui32TxCount) -{ - uint16_t ui16CANError; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - - // Read the current count of transmit/receive errors. - ui16CANError = HWREGH(ui32Base + CAN_O_ERRC); - - // Extract the error numbers from the register value. - *pui32RxCount = (ui16CANError & CAN_ERRC_REC_M) >> CAN_ERRC_REC_S; - *pui32TxCount = (ui16CANError & CAN_ERRC_TEC_M) >> CAN_ERRC_TEC_S; - - if(ui16CANError & CAN_ERRC_RP) - { - return(true); - } - - return(false); -} - -//***************************************************************************** -// -//! Configures a message object in the CAN controller. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32ObjID is the object number to configure (1-32). -//! \param pMsgObject is a pointer to a structure containing message object -//! settings. -//! \param eMsgType indicates the type of message for this object. -//! -//! This function is used to configure any one of the 32 message objects in the -//! CAN controller. A message object can be configured as any type of CAN -//! message object as well as several options for automatic transmission and -//! reception. This call also allows the message object to be configured to -//! generate interrupts on completion of message receipt or transmission. The -//! message object can also be configured with a filter/mask so that actions -//! are only taken when a message that meets certain parameters is seen on the -//! CAN bus. -//! -//! The \e eMsgType parameter must be one of the following values: -//! -//! - \b MSG_OBJ_TYPE_TX - CAN transmit message object. -//! - \b MSG_OBJ_TYPE_TX_REMOTE - CAN transmit remote request message object. -//! - \b MSG_OBJ_TYPE_RX - CAN receive message object. -//! - \b MSG_OBJ_TYPE_RX_REMOTE - CAN receive remote request message object. -//! - \b MSG_OBJ_TYPE_RXTX_REMOTE - CAN remote frame receive remote, then -//! transmit message object. -//! -//! The message object pointed to by \e pMsgObject must be populated by the -//! caller, as follows: -//! -//! - \e ui32MsgID - contains the message ID, either 11 or 29 bits. -//! - \e ui32MsgIDMask - mask of bits from \e ui32MsgID that must match if -//! identifier filtering is enabled. -//! - \e ui32Flags -//! - Set \b MSG_OBJ_TX_INT_ENABLE flag to enable interrupt on transmission. -//! - Set \b MSG_OBJ_RX_INT_ENABLE flag to enable interrupt on receipt. -//! - Set \b MSG_OBJ_USE_ID_FILTER flag to enable filtering based on the -//! identifier mask specified by \e ui32MsgIDMask. -//! - \e ui32MsgLen - the number of bytes in the message data. This should be -//! non-zero even for a remote frame; it should match the expected bytes of the -//! data responding data frame. -//! - \e pucMsgData - points to a buffer containing up to 8 bytes of data for a -//! data frame. -//! -//! \b Example: To send a data frame or remote frame(in response to a remote -//! request), take the following steps: -//! -//! -# Set \e eMsgType to \b MSG_OBJ_TYPE_TX. -//! -# Set \e pMsgObject->ui32MsgID to the message ID. -//! -# Set \e pMsgObject->ui32Flags. Make sure to set \b MSG_OBJ_TX_INT_ENABLE to -//! allow an interrupt to be generated when the message is sent. -//! -# Set \e pMsgObject->ui32MsgLen to the number of bytes in the data frame. -//! -# Set \e pMsgObject->pucMsgData to point to an array containing the bytes -//! to send in the message. -//! -# Call this function with \e ui32ObjID set to one of the 32 object buffers. -//! -//! \b Example: To receive a specific data frame, take the following steps: -//! -//! -# Set \e eMsgObjType to \b MSG_OBJ_TYPE_RX. -//! -# Set \e pMsgObject->ui32MsgID to the full message ID, or a partial mask to -//! use partial ID matching. -//! -# Set \e pMsgObject->ui32MsgIDMask bits that should be used for masking -//! during comparison. -//! -# Set \e pMsgObject->ui32Flags as follows: -//! - Set \b MSG_OBJ_TX_INT_ENABLE flag to be interrupted when the data frame -//! is received. -//! - Set \b MSG_OBJ_USE_ID_FILTER flag to enable identifier based filtering. -//! -# Set \e pMsgObject->ui32MsgLen to the number of bytes in the expected data -//! frame. -//! -# The buffer pointed to by \e pMsgObject->pucMsgData and -//! \e pMsgObject->ui32MsgLen are not used by this call as no data is present at -//! the time of the call. -//! -# Call this function with \e ui32ObjID set to one of the 32 object buffers. -//! -//! If you specify a message object buffer that already contains a message -//! definition, it will be overwritten. -//! -//! \return None. -// -//***************************************************************************** -void -CANMessageSet(uint32_t ui32Base, uint32_t ui32ObjID, tCANMsgObject *pMsgObject, - tMsgObjType eMsgType) -{ - uint32_t ui32CmdMaskReg; - uint32_t ui32MaskReg; - uint32_t ui32ArbReg; - uint32_t ui32MsgCtrl; - bool bTransferData; - bool bUseExtendedID; - - bTransferData = 0; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32ObjID <= 32) && (ui32ObjID != 0)); - ASSERT((eMsgType == MSG_OBJ_TYPE_TX) || - (eMsgType == MSG_OBJ_TYPE_TX_REMOTE) || - (eMsgType == MSG_OBJ_TYPE_RX) || - (eMsgType == MSG_OBJ_TYPE_RX_REMOTE) || - (eMsgType == MSG_OBJ_TYPE_TX_REMOTE) || - (eMsgType == MSG_OBJ_TYPE_RXTX_REMOTE)); - - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - - // See if we need to use an extended identifier or not. - if((pMsgObject->ui32MsgID > CAN_MAX_11BIT_MSG_ID) || - (pMsgObject->ui32Flags & MSG_OBJ_EXTENDED_ID)) - { - bUseExtendedID = 1; - } - else - { - bUseExtendedID = 0; - } - - // This is always a write to the Message object as this call is setting a - // message object. This call will also always set all size bits so it sets - // both data bits. The call will use the CONTROL register to set control - // bits so this bit needs to be set as well. - ui32CmdMaskReg = (CAN_IF1CMD_DIR | CAN_IF1CMD_DATA_A | CAN_IF1CMD_DATA_B | - CAN_IF1CMD_CONTROL); - - // Initialize the values to a known state before filling them in based on - // the type of message object that is being configured. - ui32ArbReg = 0; - ui32MsgCtrl = 0; - ui32MaskReg = 0; - - switch(eMsgType) - { - // Transmit message object. - case MSG_OBJ_TYPE_TX: - { - // Set the TXRQST bit and the reset the rest of the register. - ui32MsgCtrl |= CAN_IF1MCTL_TXRQST; - ui32ArbReg = CAN_IF1ARB_DIR; - bTransferData = 1; - break; - } - - // Transmit remote request message object - case MSG_OBJ_TYPE_TX_REMOTE: - { - // Set the TXRQST bit and the reset the rest of the register. - ui32MsgCtrl |= CAN_IF1MCTL_TXRQST; - ui32ArbReg = 0; - break; - } - - // Receive message object. - case MSG_OBJ_TYPE_RX: - { - // This clears the DIR bit along with everything else. The TXRQST - // bit was cleared by defaulting ui32MsgCtrl to 0. - ui32ArbReg = 0; - break; - } - - // Receive remote request message object. - case MSG_OBJ_TYPE_RX_REMOTE: - { - // The DIR bit is set to one for remote receivers. The TXRQST bit - // was cleared by defaulting ui32MsgCtrl to 0. - ui32ArbReg = CAN_IF1ARB_DIR; - - // Set this object so that it only indicates that a remote frame - // was received and allow for software to handle it by sending back - // a data frame. - ui32MsgCtrl = CAN_IF1MCTL_UMASK; - - // Use the full Identifier by default. - ui32MaskReg = CAN_IF1MSK_MSK_M; - - // Make sure to send the mask to the message object. - ui32CmdMaskReg |= CAN_IF1CMD_MASK; - break; - } - - // Remote frame receive remote, with auto-transmit message object. - case MSG_OBJ_TYPE_RXTX_REMOTE: - { - // Oddly the DIR bit is set to one for remote receivers. - ui32ArbReg = CAN_IF1ARB_DIR; - - // Set this object to auto answer if a matching identifier is seen. - ui32MsgCtrl = CAN_IF1MCTL_RMTEN | CAN_IF1MCTL_UMASK; - - // The data to be returned needs to be filled in. - bTransferData = 1; - break; - } - - // This case should never happen due to the ASSERT statement at the - // beginning of this function. - default: - { - return; - } - } - - // Configure the Mask Registers. - if(pMsgObject->ui32Flags & MSG_OBJ_USE_ID_FILTER) - { - if(bUseExtendedID) - { - // Set the 29 bits of Identifier mask that were requested. - ui32MaskReg = pMsgObject->ui32MsgIDMask & CAN_IF1MSK_MSK_M; - } - else - { - - // Put the 11 bit Mask Identifier into the upper bits of the field - // in the register. - ui32MaskReg = ((pMsgObject->ui32MsgIDMask << CAN_IF1ARB_STD_ID_S) & - CAN_IF1ARB_STD_ID_M); - } - } - - // If the caller wants to filter on the extended ID bit then set it. - if((pMsgObject->ui32Flags & MSG_OBJ_USE_EXT_FILTER) == - MSG_OBJ_USE_EXT_FILTER) - { - ui32MaskReg |= CAN_IF1MSK_MXTD; - } - - // The caller wants to filter on the message direction field. - if((pMsgObject->ui32Flags & MSG_OBJ_USE_DIR_FILTER) == - MSG_OBJ_USE_DIR_FILTER) - { - ui32MaskReg |= CAN_IF1MSK_MDIR; - } - - if(pMsgObject->ui32Flags & (MSG_OBJ_USE_ID_FILTER | MSG_OBJ_USE_DIR_FILTER | - MSG_OBJ_USE_EXT_FILTER)) - { - // Set the UMASK bit to enable using the mask register. - ui32MsgCtrl |= CAN_IF1MCTL_UMASK; - - // Set the MASK bit so that this gets transferred to the Message - // Object. - ui32CmdMaskReg |= CAN_IF1CMD_MASK; - } - - // Set the Arb bit so that this gets transferred to the Message object. - ui32CmdMaskReg |= CAN_IF1CMD_ARB; - - // Configure the Arbitration registers. - if(bUseExtendedID) - { - // Set the 29 bit version of the Identifier for this message object. - // Mark the message as valid and set the extended ID bit. - ui32ArbReg |= (pMsgObject->ui32MsgID & CAN_IF1ARB_ID_M) | - CAN_IF1ARB_MSGVAL | CAN_IF1ARB_XTD; - } - else - { - // Set the 11 bit version of the Identifier for this message object. - // The lower 18 bits are set to zero. - // Mark the message as valid. - ui32ArbReg |= ((pMsgObject->ui32MsgID << CAN_IF1ARB_STD_ID_S) & - CAN_IF1ARB_STD_ID_M) | CAN_IF1ARB_MSGVAL; - } - - // Set the data length since this is set for all transfers. This is also a - // single transfer and not a FIFO transfer so set EOB bit. - ui32MsgCtrl |= (pMsgObject->ui32MsgLen & CAN_IF1MCTL_DLC_M); - - // Mark this as the last entry if this is not the last entry in a FIFO. - if((pMsgObject->ui32Flags & MSG_OBJ_FIFO) == 0) - { - ui32MsgCtrl |= CAN_IF1MCTL_EOB; - } - - // Enable transmit interrupts if they should be enabled. - if(pMsgObject->ui32Flags & MSG_OBJ_TX_INT_ENABLE) - { - ui32MsgCtrl |= CAN_IF1MCTL_TXIE; - } - - // Enable receive interrupts if they should be enabled. - if(pMsgObject->ui32Flags & MSG_OBJ_RX_INT_ENABLE) - { - ui32MsgCtrl |= CAN_IF1MCTL_RXIE; - } - - // Write the data out to the CAN Data registers if needed. - if(bTransferData) - { - CANDataRegWrite(pMsgObject->pucMsgData, - (uint32_t *)(ui32Base + CAN_O_IF1DATA), - pMsgObject->ui32MsgLen); - } - - // Write out the registers to program the message object. - HWREGH(ui32Base + CAN_O_IF1CMD + 2) = ui32CmdMaskReg >> 16; - - HWREGH(ui32Base + CAN_O_IF1MSK) = ui32MaskReg & CAN_REG_WORD_MASK; - HWREGH(ui32Base + CAN_O_IF1MSK + 2) = ui32MaskReg >> 16; - - HWREGH(ui32Base + CAN_O_IF1ARB) = ui32ArbReg & CAN_REG_WORD_MASK; - HWREGH(ui32Base + CAN_O_IF1ARB + 2) = ui32ArbReg >> 16; - - HWREGH(ui32Base + CAN_O_IF1MCTL) = ui32MsgCtrl & CAN_REG_WORD_MASK; - - // Transfer the message object to the message object specific by ui32ObjID. - HWREGH(ui32Base + CAN_O_IF1CMD) = ui32ObjID & CAN_IF1CMD_MSG_NUM_M; - - return; -} - -//***************************************************************************** -// -//! Reads a CAN message from one of the message object buffers. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32ObjID is the object number to read (1-32). -//! \param pMsgObject points to a structure containing message object fields. -//! \param bClrPendingInt indicates whether an associated interrupt should be -//! cleared. -//! -//! This function is used to read the contents of one of the 32 message objects -//! in the CAN controller, and return it to the caller. The data returned is -//! stored in the fields of the caller-supplied structure pointed to by -//! \e pMsgObject. The data consists of all of the parts of a CAN message, -//! plus some control and status information. -//! -//! Normally this is used to read a message object that has received and stored -//! a CAN message with a certain identifier. However, this could also be used -//! to read the contents of a message object in order to load the fields of the -//! structure in case only part of the structure needs to be changed from a -//! previous setting. -//! -//! When using CANMessageGet, all of the same fields of the structure are -//! populated in the same way as when the CANMessageSet() function is used, -//! with the following exceptions: -//! -//! \e pMsgObject->ui32Flags: -//! -//! - \b MSG_OBJ_NEW_DATA indicates if this is new data since the last time it -//! was read -//! - \b MSG_OBJ_DATA_LOST indicates that at least one message was received on -//! this message object, and not read by the host before being overwritten. -//! -//! \return None. -// -//***************************************************************************** -void -CANMessageGet(uint32_t ui32Base, uint32_t ui32ObjID, tCANMsgObject *pMsgObject, - bool bClrPendingInt) -{ - uint32_t ui32CmdMaskReg; - uint32_t ui32MaskReg; - uint32_t ui32ArbReg; - uint32_t ui32MsgCtrl; - - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32ObjID <= 32) && (ui32ObjID != 0)); - - // This is always a read to the Message object as this call is setting a - // message object. - ui32CmdMaskReg = (CAN_IF2CMD_DATA_A | CAN_IF2CMD_DATA_B | - CAN_IF2CMD_CONTROL | CAN_IF2CMD_MASK | CAN_IF2CMD_ARB); - - // Clear a pending interrupt and new data in a message object. - if(bClrPendingInt) - { - ui32CmdMaskReg |= CAN_IF2CMD_CLRINTPND | CAN_IF2CMD_TXRQST; - } - - // Set up the request for data from the message object. - HWREGH(ui32Base + CAN_O_IF2CMD + 2) = ui32CmdMaskReg >> 16; - - // Transfer the message object to the message object specified by ui32ObjID. - HWREGH(ui32Base + CAN_O_IF2CMD) = ui32ObjID & CAN_IF2CMD_MSG_NUM_M; - - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF2CMD) & CAN_IF2CMD_BUSY) - { - } - - // Read out the IF Registers. - ui32MaskReg = HWREG(ui32Base + CAN_O_IF2MSK); - ui32ArbReg = HWREG(ui32Base + CAN_O_IF2ARB); - ui32MsgCtrl = HWREG(ui32Base + CAN_O_IF2MCTL); - pMsgObject->ui32Flags = MSG_OBJ_NO_FLAGS; - - // Determine if this is a remote frame by checking the TXRQST and DIR bits. - if((!(ui32MsgCtrl & CAN_IF2MCTL_TXRQST) && (ui32ArbReg & CAN_IF2ARB_DIR)) || - ((ui32MsgCtrl & CAN_IF2MCTL_TXRQST) && (!(ui32ArbReg & CAN_IF2ARB_DIR)))) - { - pMsgObject->ui32Flags |= MSG_OBJ_REMOTE_FRAME; - } - - // Get the identifier out of the register, the format depends on size of - // the mask. - if(ui32ArbReg & CAN_IF2ARB_XTD) - { - // Set the 29 bit version of the Identifier for this message object. - pMsgObject->ui32MsgID = ui32ArbReg & CAN_IF2ARB_ID_M; - - pMsgObject->ui32Flags |= MSG_OBJ_EXTENDED_ID; - } - else - { - // The Identifier is an 11 bit value. - pMsgObject->ui32MsgID = (ui32ArbReg & - CAN_IF2ARB_STD_ID_M) >> CAN_IF2ARB_STD_ID_S; - } - - // Indicate that we lost some data. - if(ui32MsgCtrl & CAN_IF2MCTL_MSGLST) - { - pMsgObject->ui32Flags |= MSG_OBJ_DATA_LOST; - } - - // Set the flag to indicate if ID masking was used. - if(ui32MsgCtrl & CAN_IF2MCTL_UMASK) - { - if(ui32ArbReg & CAN_IF2ARB_XTD) - { - // The Identifier Mask is assumed to also be a 29 bit value. - pMsgObject->ui32MsgIDMask = (ui32MaskReg & CAN_IF2MSK_MSK_M); - - // If this is a fully specified Mask and a remote frame then don't - // set the MSG_OBJ_USE_ID_FILTER because the ID was not really - // filtered. - if((pMsgObject->ui32MsgIDMask != 0x1fffffff) || - ((pMsgObject->ui32Flags & MSG_OBJ_REMOTE_FRAME) == 0)) - { - pMsgObject->ui32Flags |= MSG_OBJ_USE_ID_FILTER; - } - } - else - { - // The Identifier Mask is assumed to also be an 11 bit value. - pMsgObject->ui32MsgIDMask = ((ui32MaskReg & CAN_IF2MSK_MSK_M) >> - 18); - - // If this is a fully specified Mask and a remote frame then don't - // set the MSG_OBJ_USE_ID_FILTER because the ID was not really - // filtered. - if((pMsgObject->ui32MsgIDMask != 0x7ff) || - ((pMsgObject->ui32Flags & MSG_OBJ_REMOTE_FRAME) == 0)) - { - pMsgObject->ui32Flags |= MSG_OBJ_USE_ID_FILTER; - } - } - - // Indicate if the extended bit was used in filtering. - if(ui32MaskReg & CAN_IF2MSK_MXTD) - { - pMsgObject->ui32Flags |= MSG_OBJ_USE_EXT_FILTER; - } - - // Indicate if direction filtering was enabled. - if(ui32MaskReg & CAN_IF2MSK_MDIR) - { - pMsgObject->ui32Flags |= MSG_OBJ_USE_DIR_FILTER; - } - } - - // Set the interrupt flags. - if(ui32MsgCtrl & CAN_IF2MCTL_TXIE) - { - pMsgObject->ui32Flags |= MSG_OBJ_TX_INT_ENABLE; - } - if(ui32MsgCtrl & CAN_IF2MCTL_RXIE) - { - pMsgObject->ui32Flags |= MSG_OBJ_RX_INT_ENABLE; - } - - // See if there is new data available. - if(ui32MsgCtrl & CAN_IF2MCTL_NEWDAT) - { - // Get the amount of data needed to be read. - pMsgObject->ui32MsgLen = (ui32MsgCtrl & CAN_IF2MCTL_DLC_M); - - // Don't read any data for a remote frame, there is nothing valid in - // that buffer anyway. - if((pMsgObject->ui32Flags & MSG_OBJ_REMOTE_FRAME) == 0) - { - // Read out the data from the CAN registers. - CANDataRegRead(pMsgObject->pucMsgData, - (uint32_t *)(ui32Base + CAN_O_IF2DATA), - pMsgObject->ui32MsgLen); - } - - // Now clear out the new data flag. - HWREGH(ui32Base + CAN_O_IF2CMD + 2) = CAN_IF2CMD_TXRQST >> 16; - - // Transfer the message object to the message object specified by - // ui32ObjID. - HWREGH(ui32Base + CAN_O_IF2CMD) = ui32ObjID & CAN_IF2CMD_MSG_NUM_M; - - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF2CMD) & CAN_IF2CMD_BUSY) - { - } - - // Indicate that there is new data in this message. - pMsgObject->ui32Flags |= MSG_OBJ_NEW_DATA; - } - else - { - // Along with the MSG_OBJ_NEW_DATA not being set the amount of data - // needs to be set to zero if none was available. - pMsgObject->ui32MsgLen = 0; - } -} - -//***************************************************************************** -// -//! Clears a message object so that it is no longer used. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32ObjID is the message object number to disable (1-32). -//! -//! This function frees the specified message object from use. Once a message -//! object has been ``cleared,'' it will no longer automatically send or -//! receive messages, or generate interrupts. -//! -//! \return None. -// -//***************************************************************************** -void -CANMessageClear(uint32_t ui32Base, uint32_t ui32ObjID) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32ObjID >= 1) && (ui32ObjID <= 32)); - - // Wait for busy bit to clear - while(HWREGH(ui32Base + CAN_O_IF1CMD) & CAN_IF1CMD_BUSY) - { - } - - // Clear the message value bit in the arbitration register. This indicates - // the message is not valid. - HWREGH(ui32Base + CAN_O_IF1CMD + 2) = (CAN_IF1CMD_DIR | - CAN_IF1CMD_ARB) >> 16; - HWREGH(ui32Base + CAN_O_IF1ARB) = 0; - HWREGH(ui32Base + CAN_O_IF1ARB + 2) = 0; - - // Initiate programming the message object - HWREGH(ui32Base + CAN_O_IF1CMD) = ui32ObjID & CAN_IF1CMD_MSG_NUM_M; -} - -//***************************************************************************** -// -//! CAN Global interrupt Enable function. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be enabled. -//! -//! Enables specific CAN interrupt in the global interrupt enable register -//! -//! The \e ui32IntFlags parameter is the logical OR of any of the following: -//! -//! CAN_GLB_INT_CANINT0 -Global Interrupt Enable bit for CAN INT0 -//! CAN_GLB_INT_CANINT1 -Global Interrupt Enable bit for CAN INT1 -//! -//! \return None. -// -//***************************************************************************** -void -CANGlobalIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntFlags & ~(CAN_GLB_INT_CANINT0 | - CAN_GLB_INT_CANINT1)) == 0); - - //enable the requested interrupts - HWREGH(ui32Base + CAN_O_GLB_INT_EN) |= ui32IntFlags; -} - -//***************************************************************************** -// -//! CAN Global interrupt Disable function. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be enabled. -//! -//! Disables the specific CAN interrupt in the global interrupt enable register -//! -//! The \e ui32IntFlags parameter is the logical OR of any of the following: -//! -//! CAN_GLB_INT_CANINT0 -Global Interrupt bit for CAN INT0 -//! CAN_GLB_INT_CANINT1 -Global Interrupt bit for CAN INT1 -//! -//! \return None. -// -//***************************************************************************** -void -CANGlobalIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntFlags & ~(CAN_GLB_INT_CANINT0 | - CAN_GLB_INT_CANINT1)) == 0); - - //disable the requested interrupts - HWREGH(ui32Base + CAN_O_GLB_INT_EN) &= ~ui32IntFlags; -} - -//***************************************************************************** -// -//! CAN Global interrupt Clear function. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be enabled. -//! -//! Clear the specific CAN interrupt bit in the global interrupt flag register. -//! -//! The \e ui32IntFlags parameter is the logical OR of any of the following: -//! -//! CAN_GLB_INT_CANINT0 -Global Interrupt bit for CAN INT0 -//! CAN_GLB_INT_CANINT1 -Global Interrupt bit for CAN INT1 -//! -//! \return None. -// -//***************************************************************************** -void -CANGlobalIntClear(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntFlags & ~(CAN_GLB_INT_CANINT0 | - CAN_GLB_INT_CANINT1)) == 0); - - //clear the requested interrupts - HWREGH(ui32Base + CAN_O_GLB_INT_CLR) = ui32IntFlags; -} - -//***************************************************************************** -// -//! CAN Global interrupt Status function. -//! -//! \param ui32Base is the base address of the CAN controller. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be checked. -//! -//! Get the status of the specific CAN interrupt bits in the global interrupt -//! flag register. -//! -//! The \e ui32IntFlags parameter is the logical OR of any of the following: -//! -//! CAN_GLB_INT_CANINT0 -Global Interrupt bit for CAN INT0 -//! CAN_GLB_INT_CANINT1 -Global Interrupt bit for CAN INT1 -//! -//! \return True if any of the requested interrupt bit(s) is (are) set. -// -//***************************************************************************** -bool -CANGlobalIntstatusGet(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // Check the arguments. - ASSERT(CANBaseValid(ui32Base)); - ASSERT((ui32IntFlags & ~(CAN_GLB_INT_CANINT0 | - CAN_GLB_INT_CANINT1)) == 0); - - //enable the requested interrupts - if(HWREGH(ui32Base + CAN_O_GLB_INT_FLG) & ui32IntFlags) - { - return true; - } - else - { - return false; - } -} - -//***************************************************************************** -// Close the Doxygen group. -//! @} -//***************************************************************************** - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.h deleted file mode 100644 index 471d1fcc6d..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/can.h +++ /dev/null @@ -1,415 +0,0 @@ -//########################################################################### -// -// FILE: can.h -// -// TITLE: Defines and Macros for the CAN controller. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __CAN_H__ -#define __CAN_H__ - -//***************************************************************************** -//! \addtogroup can_api -//! @{ -//***************************************************************************** - -//***************************************************************************** -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - - -#define CAN_INDEX_TO_BASE(idx) ((idx == 0) ? CAN_A_BASE : CAN_B_BASE) - -#define CAN_INDEX_TO_MSG_RAM_BASE(idx) ((idx == 0) ? CAN_A_MSG_RAM : CAN_B_MSG_RAM) - -#define CAN_REG_WORD_MASK (0xFFFFU) - -//**************************************************************************** -// These are the Defines to select CAN pin muxing when calling the functions -// ConfigCanPinMuxing(), ConfigGpioCanA() & ConfigGpioCanB() in F2837x_Can.c -//**************************************************************************** -#define CAN_A_GPIO4_GPIO5 1 //switch case 1 -#define CAN_A_GPIO19_GPIO18 2 //switch case 2 -#define CAN_A_GPIO31_GPIO30 3 //switch case 3 -#define CAN_A_GPIO37_GPIO36 4 //switch case 4 -#define CAN_A_GPIO63_GPIO62 5 //switch case 5 -#define CAN_A_GPIO71_GPIO70 6 //switch case 6 - -#define CAN_B_GPIO6_GPIO7 1 //switch case 1 -#define CAN_B_GPIO8_GPIO10 2 //switch case 2 -#define CAN_B_GPIO12_GPIO13 3 //switch case 3 -#define CAN_B_GPIO16_GPIO17 4 //switch case 4 -#define CAN_B_GPIO20_GPIO21 5 //switch case 5 -#define CAN_B_GPIO38_GPIO39 6 //switch case 6 -#define CAN_B_GPIO72_GPIO73 7 //switch case 7 - -//***************************************************************************** -// Miscellaneous defines for Message ID Types -//***************************************************************************** - -//***************************************************************************** -// These are the flags used by the tCANMsgObject.ui32Flags value when calling the -// CANMessageSet() and CANMessageGet() functions. -//***************************************************************************** - -//! This definition is used with the tCANMsgObject ui32Flags value and indicates -//! that transmit interrupts should be enabled, or are enabled. -#define MSG_OBJ_TX_INT_ENABLE 0x00000001 - -//! This indicates that receive interrupts should be enabled, or are -//! enabled. -#define MSG_OBJ_RX_INT_ENABLE 0x00000002 - -//! This indicates that a message object will use or is using an extended -//! identifier. -#define MSG_OBJ_EXTENDED_ID 0x00000004 - -//! This indicates that a message object will use or is using filtering -//! based on the object's message identifier. -#define MSG_OBJ_USE_ID_FILTER 0x00000008 - -//! This indicates that new data was available in the message object. -#define MSG_OBJ_NEW_DATA 0x00000080 - -//! This indicates that data was lost since this message object was last -//! read. -#define MSG_OBJ_DATA_LOST 0x00000100 - -//! This indicates that a message object will use or is using filtering -//! based on the direction of the transfer. If the direction filtering is -//! used, then ID filtering must also be enabled. -#define MSG_OBJ_USE_DIR_FILTER (0x00000010 | MSG_OBJ_USE_ID_FILTER) - -//! This indicates that a message object will use or is using message -//! identifier filtering based on the extended identifier. If the extended -//! identifier filtering is used, then ID filtering must also be enabled. -#define MSG_OBJ_USE_EXT_FILTER (0x00000020 | MSG_OBJ_USE_ID_FILTER) - -//! This indicates that a message object is a remote frame. -#define MSG_OBJ_REMOTE_FRAME 0x00000040 - -//! This indicates that this message object is part of a FIFO structure and -//! not the final message object in a FIFO. -#define MSG_OBJ_FIFO 0x00000200 - -//! This indicates that a message object has no flags set. -#define MSG_OBJ_NO_FLAGS 0x00000000 - -//***************************************************************************** -//! This define is used with the flag values to allow checking only status -//! flags and not configuration flags. -//***************************************************************************** -#define MSG_OBJ_STATUS_MASK (MSG_OBJ_NEW_DATA | MSG_OBJ_DATA_LOST) - -//***************************************************************************** -//! The structure used for encapsulating all the items associated with a CAN -//! message object in the CAN controller. -//***************************************************************************** -typedef struct -{ - //! The CAN message identifier used for 11 or 29 bit identifiers. - uint32_t ui32MsgID; - - //! The message identifier mask used when identifier filtering is enabled. - uint32_t ui32MsgIDMask; - - //! This value holds various status flags and settings specified by - //! tCANObjFlags. - uint32_t ui32Flags; - - //! This value is the number of bytes of data in the message object. - uint32_t ui32MsgLen; - - //! This is a pointer to the message object's data. - unsigned char *pucMsgData; -} -tCANMsgObject; - -//***************************************************************************** -//! This structure is used for encapsulating the values associated with setting -//! up the bit timing for a CAN controller. The structure is used when calling -//! the CANGetBitTiming and CANSetBitTiming functions. -//***************************************************************************** -typedef struct -{ - //! This value holds the sum of the Synchronization, Propagation, and Phase - //! Buffer 1 segments, measured in time quanta. The valid values for this - //! setting range from 2 to 16. - uint16_t uSyncPropPhase1Seg; - - //! This value holds the Phase Buffer 2 segment in time quanta. The valid - //! values for this setting range from 1 to 8. - uint16_t uPhase2Seg; - - //! This value holds the Resynchronization Jump Width in time quanta. The - //! valid values for this setting range from 1 to 4. - uint16_t uSJW; - - //! This value holds the CAN_CLK divider used to determine time quanta. - //! The valid values for this setting range from 1 to 1023. - uint16_t uQuantumPrescaler; -} -tCANBitClkParms; - -//***************************************************************************** -//! This data type is used to identify the interrupt status register. This is -//! used when calling the CANIntStatus() function. -//***************************************************************************** -typedef enum -{ - //! Read the CAN interrupt status information. - CAN_INT_STS_CAUSE, - - //! Read a message object's interrupt status. - CAN_INT_STS_OBJECT -} -tCANIntStsReg; - -//***************************************************************************** -//! This data type is used to identify which of several status registers to -//! read when calling the CANStatusGet() function. -//***************************************************************************** -typedef enum -{ - //! Read the full CAN controller status. - CAN_STS_CONTROL, - - //! Read the full 32-bit mask of message objects with a transmit request - //! set. - CAN_STS_TXREQUEST, - - //! Read the full 32-bit mask of message objects with new data available. - CAN_STS_NEWDAT, - - //! Read the full 32-bit mask of message objects that are enabled. - CAN_STS_MSGVAL -} -tCANStsReg; - -//***************************************************************************** -// These definitions are used to specify interrupt sources to CANIntEnable() -// and CANIntDisable(). -//***************************************************************************** -//! This flag is used to allow a CAN controller to generate error -//! interrupts. -#define CAN_INT_ERROR 0x00000008 - -//! This flag is used to allow a CAN controller to generate status -//! interrupts. -#define CAN_INT_STATUS 0x00000004 - -//! This flag is used to allow a CAN controller to generate interrupts -//! on interrupt line 0 -#define CAN_INT_IE0 0x00000002 - -//! This flag is used to allow a CAN controller to generate interrupts -//! on interrupt line 1 -#define CAN_INT_IE1 0x00020000 - -// Defined to maintain compatibility with Stellaris Examples -#define CAN_INT_MASTER CAN_INT_IE0 - -//***************************************************************************** -// These definitions are used to specify the clock source to -// CANClkSourceSelect() -//***************************************************************************** -//! This flag is used to clock the CAN controller Selected CPU SYSCLKOUT -//! (CPU1.Sysclk or CPU2.Sysclk). -#define CAN_CLK_CPU_SYSCLKOUT 0 // PERx.SYSCLK (default on reset) - -//! This flag is used to clock the CAN controller with the X1/X2 oscillator -//! clock. -#define CAN_CLK_EXT_OSC 1 // External Oscillator (XTAL) - -//! This flag is used to clock the CAN controller with the clock from -//! AUXCLKIN (from GPIO) -#define CAN_CLK_AUXCLKIN 2 // AUXCLKIN (from GPIO) - - -//***************************************************************************** -//! This definition is used to determine the type of message object that will -//! be set up via a call to the CANMessageSet() API. -//***************************************************************************** -typedef enum -{ - //! Transmit message object. - MSG_OBJ_TYPE_TX, - - //! Transmit remote request message object - MSG_OBJ_TYPE_TX_REMOTE, - - //! Receive message object. - MSG_OBJ_TYPE_RX, - - //! Receive remote request message object. - MSG_OBJ_TYPE_RX_REMOTE, - - //! Remote frame receive remote, with auto-transmit message object. - MSG_OBJ_TYPE_RXTX_REMOTE -} -tMsgObjType; - -//***************************************************************************** -// The following enumeration contains all error or status indicators that can -// be returned when calling the CANStatusGet() function. -//***************************************************************************** -//! CAN controller is in local power down mode. -#define CAN_STATUS_PDA 0x00000400 - -//! CAN controller has initiated a system wakeup. -#define CAN_STATUS_WAKE_UP 0x00000200 - -//! CAN controller has detected a parity error. -#define CAN_STATUS_PERR 0x00000100 - -//! CAN controller has entered a Bus Off state. -#define CAN_STATUS_BUS_OFF 0x00000080 - -//! CAN controller error level has reached warning level. -#define CAN_STATUS_EWARN 0x00000040 - -//! CAN controller error level has reached error passive level. -#define CAN_STATUS_EPASS 0x00000020 - -//! A message was received successfully since the last read of this status. -#define CAN_STATUS_RXOK 0x00000010 - -//! A message was transmitted successfully since the last read of this -//! status. -#define CAN_STATUS_TXOK 0x00000008 - -//! This is the mask for the last error code field. -#define CAN_STATUS_LEC_MSK 0x00000007 - -//! There was no error. -#define CAN_STATUS_LEC_NONE 0x00000000 - -//! A bit stuffing error has occurred. -#define CAN_STATUS_LEC_STUFF 0x00000001 - -//! A formatting error has occurred. -#define CAN_STATUS_LEC_FORM 0x00000002 - -//! An acknowledge error has occurred. -#define CAN_STATUS_LEC_ACK 0x00000003 - -//! The bus remained a bit level of 1 for longer than is allowed. -#define CAN_STATUS_LEC_BIT1 0x00000004 - -//! The bus remained a bit level of 0 for longer than is allowed. -#define CAN_STATUS_LEC_BIT0 0x00000005 - -//! A CRC error has occurred. -#define CAN_STATUS_LEC_CRC 0x00000006 - -//***************************************************************************** -// The following macros are added for the new Global Interrupt EN/FLG/CLR -// register -//***************************************************************************** -//CANINT0 global interrupt bit -#define CAN_GLOBAL_INT_CANINT0 0x00000001 - -//CANINT1 global interrupt bit -#define CAN_GLOBAL_INT_CANINT1 0x00000002 - -//***************************************************************************** -// The following macros are missing in hw_can.h because of scripting -// but driverlib can.c needs them -//***************************************************************************** - -#define CAN_INT_INT0ID_STATUS 0x8000 - -#define CAN_IF1ARB_STD_ID_S 18 -#define CAN_IF1ARB_STD_ID_M 0x1FFC0000 // Standard Message Identifier - -#define CAN_IF2ARB_STD_ID_S 18 -#define CAN_IF2ARB_STD_ID_M 0x1FFC0000 // Standard Message Identifier - -//***************************************************************************** -// API Function prototypes -//***************************************************************************** -extern void CANClkSourceSelect(uint32_t ui32Base, uint16_t ucSource); -extern void CANBitTimingGet(uint32_t ui32Base, tCANBitClkParms *pClkParms); -extern void CANBitTimingSet(uint32_t ui32Base, tCANBitClkParms *pClkParms); -extern uint32_t CANBitRateSet(uint32_t ui32Base, uint32_t ui32SourceClock, - uint32_t ui32BitRate); -extern void CANDisable(uint32_t ui32Base); -extern void CANEnable(uint32_t ui32Base); -extern bool CANErrCntrGet(uint32_t ui32Base, uint32_t *pui32RxCount, - uint32_t *pui32TxCount); -extern void CANInit(uint32_t ui32Base); -extern void CANIntClear(uint32_t ui32Base, uint32_t ui32IntClr); -extern void CANIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags); -extern void CANIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags); -extern void CANIntRegister(uint32_t ui32Base, unsigned char ucIntNumber, - void (*pfnHandler)(void)); -extern uint32_t CANIntStatus(uint32_t ui32Base, tCANIntStsReg eIntStsReg); -extern void CANIntUnregister(uint32_t ui32Base, unsigned char ucIntNumber); -extern void CANMessageClear(uint32_t ui32Base, uint32_t ui32ObjID); -extern void CANMessageGet(uint32_t ui32Base, uint32_t ui32ObjID, - tCANMsgObject *pMsgObject, bool bClrPendingInt); -extern void CANMessageSet(uint32_t ui32Base, uint32_t ui32ObjID, - tCANMsgObject *pMsgObject, tMsgObjType eMsgType); -extern bool CANRetryGet(uint32_t ui32Base); -extern void CANRetrySet(uint32_t ui32Base, bool bAutoRetry); -extern uint32_t CANStatusGet(uint32_t ui32Base, tCANStsReg eStatusReg); -extern void CANGlobalIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags); -extern void CANGlobalIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags); -extern void CANGlobalIntClear(uint32_t ui32Base, uint32_t ui32IntFlags); -extern bool CANGlobalIntstatusGet(uint32_t ui32Base, uint32_t ui32IntFlags); - -//***************************************************************************** -// Mark the end of the C bindings section for C++ compilers. -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -//***************************************************************************** -// Close the Doxygen group. -//! @} -//***************************************************************************** - -#endif // __CAN_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/debug.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/debug.h deleted file mode 100644 index 8d018c0c7c..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/debug.h +++ /dev/null @@ -1,75 +0,0 @@ -//########################################################################### -// -// FILE: debug.h -// -// TITLE: Stellaris style debug header. Included for compatability. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __DEBUG_H__ -#define __DEBUG_H__ - -//***************************************************************************** -// -// Prototype for the function that is called when an invalid argument is passed -// to an API. This is only used when doing a DEBUG build. -// -//***************************************************************************** -extern void __error__(char *pcFilename, unsigned long ulLine); - -//***************************************************************************** -// -// The ASSERT macro, which does the actual assertion checking. Typically, this -// will be for procedure arguments. -// -//***************************************************************************** - - -#ifdef DEBUG -#define ASSERT(expr) { \ - if(!(expr)) \ - { \ - __error__(__FILE__, __LINE__); \ - } \ - } -#else -#define ASSERT(expr) -#endif - -#endif // __DEBUG_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.c b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.c deleted file mode 100644 index 5bff0345ab..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.c +++ /dev/null @@ -1,411 +0,0 @@ -//########################################################################### -// -// FILE: interrupt.c -// -// TITLE: Stellaris style wrapper driver for C28x PIE Interrupt Controller. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -//***************************************************************************** -// -//! \addtogroup interrupt_api -//! @{ -// -//***************************************************************************** - -#include "F28x_Project.h" - -#include "inc/hw_types.h" -#include "driverlib/interrupt.h" -#include -#include -#include - - -//***************************************************************************** -// -//! \internal -//! The default interrupt handler. -//! -//! This is the default interrupt handler. Whenever an interrupt is -//! unregisterd this handler takes it place. -//! -//! \return None. -// -//***************************************************************************** -__interrupt void IntDefaultHandler(void) -{ - asm(" ESTOP0"); - return; -} - -//***************************************************************************** -// -//! Enables the processor interrupt. -//! -//! Allows the processor to respond to interrupts. This does not affect the -//! set of interrupts enabled in the interrupt controller; it just gates the -//! single interrupt from the controller to the processor. -//! -//! \note Previously, this function had no return value. As such, it was -//! possible to include interrupt.h and call this function without -//! having included hw_types.h. Now that the return is a -//! bool, a compiler error will occur in this case. The solution -//! is to include hw_types.h before including interrupt.h. -//! -//! \return Returns \b true if interrupts were disabled when the function was -//! called or \b false if they were initially enabled. -// -//***************************************************************************** -bool -IntMasterEnable(void) -{ - // - // Enable processor interrupts. - // - return __enable_interrupts() & 0x1; -} - -//***************************************************************************** -// -//! Disables the processor interrupt. -//! -//! Prevents the processor from receiving interrupts. This does not affect the -//! set of interrupts enabled in the interrupt controller; it just gates the -//! single interrupt from the controller to the processor. -//! -//! \note Previously, this function had no return value. As such, it was -//! possible to include interrupt.h and call this function without -//! having included hw_types.h. Now that the return is a -//! bool, a compiler error will occur in this case. The solution -//! is to include hw_types.h before including interrupt.h. -//! -//! \return Returns \b true if interrupts were already disabled when the -//! function was called or \b false if they were initially enabled. -// -//***************************************************************************** -bool -IntMasterDisable(void) -{ - // - // Disable processor interrupts. - // - return __disable_interrupts() & 0x1; -} - -//***************************************************************************** -// -//! Registers a function to be called when an interrupt occurs. -// -//! Assumes PIE is enabled -//! -//! \param ui32Interrupt specifies the interrupt in question. -//! \param pfnHandler is a pointer to the function to be called. -//! -//! This function is used to specify the handler function to be called when the -//! given interrupt is asserted to the processor. When the interrupt occurs, -//! if it is enabled (via IntEnable()), the handler function will be called in -//! interrupt context. Since the handler function can pre-empt other code, care -//! must be taken to protect memory or peripherals that are accessed by the -//! handler and other non-handler code. -//! -//! \return None. -// -//***************************************************************************** -void -IntRegister(uint32_t ui32Interrupt, void (*pfnHandler)(void)) -{ - EALLOW; - //Copy ISR address into PIE table - memcpy((uint16_t *) &PieVectTable + ((ui32Interrupt & 0xFFFF0000) >> 16)*2, (uint16_t *) &pfnHandler, sizeof(pfnHandler)); - EDIS; -} - -//***************************************************************************** -// -//! Unregisters the function to be called when an interrupt occurs. -//! -//! \param ui32Interrupt specifies the interrupt in question. -//! -//! This function is used to indicate that no handler should be called when the -//! given interrupt is asserted to the processor. The interrupt source will be -//! automatically disabled (via IntDisable()) if necessary. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -IntUnregister(uint32_t ui32Interrupt) -{ - uint32_t temp; - - temp = (uint32_t) IntDefaultHandler; - - EALLOW; - //Copy default ISR address into PIE table - memcpy((uint16_t *) &PieVectTable + ((ui32Interrupt & 0xFFFF0000) >> 16)*2, (uint16_t *) &temp, sizeof(temp)); - EDIS; -} - -//***************************************************************************** -// -//! Enables an interrupt. -//! -//! \param ui32Interrupt specifies the interrupt to be enabled. -//! -//! The specified interrupt is enabled in the interrupt controller. Other -//! enables for the interrupt (such as at the peripheral level) are unaffected -//! by this function. -//! -//! \return None. -// -//***************************************************************************** -void -IntEnable(uint32_t ui32Interrupt) -{ - uint16_t ui16IntsEnabled; - - ui32Interrupt = ui32Interrupt >> 16; - EALLOW; - //Ensure that PIE is enabled - PieCtrlRegs.PIECTRL.bit.ENPIE=1; - - ui16IntsEnabled = IntMasterDisable(); - - if (ui32Interrupt >= 0x20 && ui32Interrupt <= 0x7F) //Lower PIE table - { - //Enable Individual PIE interrupt - *(uint16_t *)((&PieCtrlRegs.PIEIER1.all) + (((ui32Interrupt-0x20)/8))*2) |= 1 << ((ui32Interrupt-0x20)%8); - - // Wait for any pending interrupts to get to the CPU - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - - //Clear the CPU flag - IntIFRClear(1 << ((ui32Interrupt - 0x20)/8)); - - //Acknowlege any interrupts - PieCtrlRegs.PIEACK.all = 1 << ((ui32Interrupt - 0x20)/8); - - //Enable PIE Group Interrupt - IER |= 1 << ((ui32Interrupt - 0x20)/8); - } - else if (ui32Interrupt >= 0x80) //Upper PIE table - { - //Enable Individual PIE interrupt - *(uint16_t *)((&PieCtrlRegs.PIEIER1.all) + (((ui32Interrupt-0x80)/8))*2) |= 1 << (((ui32Interrupt-0x80)%8)+8); - - // Wait for any pending interrupts to get to the CPU - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - - //Clear the CPU flag - IntIFRClear(1 << ((ui32Interrupt - 0x80)/8)); - - //Acknowlege any interrupts - PieCtrlRegs.PIEACK.all = 1 << ((ui32Interrupt - 0x80)/8); - - //Enable PIE Group Interrupt - IER |= 1 << ((ui32Interrupt - 0x80)/8); - } - else if (ui32Interrupt >= 0x0D && ui32Interrupt <= 0x10) //INT13, INT14, DLOGINT, & RTOSINT - { - //Enable PIE Group Interrupt - IER |= 1 << (ui32Interrupt - 1); - } - else - { - //Other interrupts - } - - EDIS; - - //Re-enable interrupts if they were enabled - if(!ui16IntsEnabled){ - IntMasterEnable(); - } -} - -//***************************************************************************** -// -//! Disables an interrupt. -//! -//! \param ui32Interrupt specifies the interrupt to be disabled. -//! -//! The specified interrupt is disabled in the interrupt controller. Other -//! enables for the interrupt (such as at the peripheral level) are unaffected -//! by this function. -//! -//! \return None. -// -//***************************************************************************** -void -IntDisable(uint32_t ui32Interrupt) -{ - uint16_t ui16IntsEnabled; - - ui32Interrupt = ui32Interrupt >> 16; - EALLOW; - - ui16IntsEnabled = IntMasterDisable(); - - if (ui32Interrupt >= 0x20 && ui32Interrupt <= 0x7F) //Lower PIE table - { - //Disable Individual PIE interrupt - *(uint16_t *)((&PieCtrlRegs.PIEIER1.all) + (((ui32Interrupt-0x20)/8))*2) &= ~(1 << ((ui32Interrupt-0x20)%8)); - - // Wait for any pending interrupts to get to the CPU - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - - //Clear the CPU flag - IntIFRClear(1 << ((ui32Interrupt - 0x20)/8)); - - //Acknowlege any interrupts - PieCtrlRegs.PIEACK.all = 1 << ((ui32Interrupt - 0x20)/8); - } - else if (ui32Interrupt >= 0x80) //Upper PIE table - { - //Disable Individual PIE interrupt - *(uint16_t *)((&PieCtrlRegs.PIEIER1.all) + (((ui32Interrupt-0x80)/8))*2) &= ~(1 << (((ui32Interrupt-0x80)%8)+8)); - - // Wait for any pending interrupts to get to the CPU - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - - //Clear the CPU flag - IntIFRClear(1 << ((ui32Interrupt - 0x80)/8)); - - //Acknowlege any interrupts - PieCtrlRegs.PIEACK.all = 1 << ((ui32Interrupt - 0x80)/8); - } - else if (ui32Interrupt >= 0x0D && ui32Interrupt <= 0x10) //INT13, INT14, DLOGINT, & RTOSINT //Work-around Case - { - //Disable PIE Group Interrupt - IER &= ~(1 << (ui32Interrupt - 1)); - } - else - { - //Other Interrupts - } - EDIS; - - //Re-enable interrupts if they were enabled - if(!ui16IntsEnabled){ - IntMasterEnable(); - } -} - -void IntIFRClear(uint16_t ui16Interrupts) -{ - switch(ui16Interrupts){ - case 0x0001: - IFR &= ~0x0001; - break; - case 0x0002: - IFR &= ~0x0002; - break; - case 0x0004: - IFR &= ~0x0004; - break; - case 0x0008: - IFR &= ~0x0008; - break; - case 0x0010: - IFR &= ~0x0010; - break; - case 0x0020: - IFR &= ~0x0020; - break; - case 0x0040: - IFR &= ~0x0040; - break; - case 0x0080: - IFR &= ~0x0080; - break; - case 0x0100: - IFR &= ~0x0100; - break; - case 0x0200: - IFR &= ~0x0200; - break; - case 0x0400: - IFR &= ~0x0400; - break; - case 0x0800: - IFR &= ~0x0800; - break; - case 0x1000: - IFR &= ~0x1000; - break; - case 0x2000: - IFR &= ~0x2000; - break; - case 0x4000: - IFR &= ~0x4000; - break; - case 0x8000: - IFR &= ~0x8000; - break; - default: - break; - } -} - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.h deleted file mode 100644 index d6104fba3f..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/interrupt.h +++ /dev/null @@ -1,81 +0,0 @@ -//########################################################################### -// -// FILE: interrupt.h -// -// TITLE: Stellaris style wrapper driver for C28x PIE Interrupt Controller. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __INTERRUPT_H__ -#define __INTERRUPT_H__ - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - -//***************************************************************************** -// -// Prototypes for the APIs. -// -//***************************************************************************** - extern bool IntMasterEnable(void); - extern bool IntMasterDisable(void); - extern void IntRegister(uint32_t ui32Interrupt, void (*pfnHandler)(void)); - extern void IntUnregister(uint32_t ui32Interrupt); - extern void IntEnable(uint32_t ui32Interrupt); - extern void IntDisable(uint32_t ui32Interrupt); - extern void IntIFRClear(uint16_t ui16Interrupts); - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -#endif // __INTERRUPT_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom.h deleted file mode 100644 index c085a00c61..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom.h +++ /dev/null @@ -1,44 +0,0 @@ -//***************************************************************************** -// -// rom.h - Macros to facilitate calling functions in the ROM. -// -// Copyright (c) 2007-2012 Texas Instruments Incorporated. All rights reserved. -// Software License Agreement -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// This is part of revision 9453 of the Stellaris Peripheral Driver Library. -// -//***************************************************************************** - -#ifndef __ROM_H__ -#define __ROM_H__ - - -#endif //__ROM_H__ diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom_map.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom_map.h deleted file mode 100644 index 7794c1a9d0..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rom_map.h +++ /dev/null @@ -1,5082 +0,0 @@ -//***************************************************************************** -// -// rom_map.h - Macros to facilitate calling functions in the ROM when they are -// available and in flash otherwise. -// -// Copyright (c) 2008-2012 Texas Instruments Incorporated. All rights reserved. -// Software License Agreement -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// This is part of revision 9453 of the Stellaris Peripheral Driver Library. -// -//***************************************************************************** - -#ifndef __ROM_MAP_H__ -#define __ROM_MAP_H__ - -//***************************************************************************** -// -// Macros for the ADC API. -// -//***************************************************************************** -#ifdef ROM_ADCSequenceDataGet -#define MAP_ADCSequenceDataGet \ - ROM_ADCSequenceDataGet -#else -#define MAP_ADCSequenceDataGet \ - ADCSequenceDataGet -#endif -#ifdef ROM_ADCIntDisable -#define MAP_ADCIntDisable \ - ROM_ADCIntDisable -#else -#define MAP_ADCIntDisable \ - ADCIntDisable -#endif -#ifdef ROM_ADCIntEnable -#define MAP_ADCIntEnable \ - ROM_ADCIntEnable -#else -#define MAP_ADCIntEnable \ - ADCIntEnable -#endif -#ifdef ROM_ADCIntStatus -#define MAP_ADCIntStatus \ - ROM_ADCIntStatus -#else -#define MAP_ADCIntStatus \ - ADCIntStatus -#endif -#ifdef ROM_ADCIntClear -#define MAP_ADCIntClear \ - ROM_ADCIntClear -#else -#define MAP_ADCIntClear \ - ADCIntClear -#endif -#ifdef ROM_ADCSequenceEnable -#define MAP_ADCSequenceEnable \ - ROM_ADCSequenceEnable -#else -#define MAP_ADCSequenceEnable \ - ADCSequenceEnable -#endif -#ifdef ROM_ADCSequenceDisable -#define MAP_ADCSequenceDisable \ - ROM_ADCSequenceDisable -#else -#define MAP_ADCSequenceDisable \ - ADCSequenceDisable -#endif -#ifdef ROM_ADCSequenceConfigure -#define MAP_ADCSequenceConfigure \ - ROM_ADCSequenceConfigure -#else -#define MAP_ADCSequenceConfigure \ - ADCSequenceConfigure -#endif -#ifdef ROM_ADCSequenceStepConfigure -#define MAP_ADCSequenceStepConfigure \ - ROM_ADCSequenceStepConfigure -#else -#define MAP_ADCSequenceStepConfigure \ - ADCSequenceStepConfigure -#endif -#ifdef ROM_ADCSequenceOverflow -#define MAP_ADCSequenceOverflow \ - ROM_ADCSequenceOverflow -#else -#define MAP_ADCSequenceOverflow \ - ADCSequenceOverflow -#endif -#ifdef ROM_ADCSequenceOverflowClear -#define MAP_ADCSequenceOverflowClear \ - ROM_ADCSequenceOverflowClear -#else -#define MAP_ADCSequenceOverflowClear \ - ADCSequenceOverflowClear -#endif -#ifdef ROM_ADCSequenceUnderflow -#define MAP_ADCSequenceUnderflow \ - ROM_ADCSequenceUnderflow -#else -#define MAP_ADCSequenceUnderflow \ - ADCSequenceUnderflow -#endif -#ifdef ROM_ADCSequenceUnderflowClear -#define MAP_ADCSequenceUnderflowClear \ - ROM_ADCSequenceUnderflowClear -#else -#define MAP_ADCSequenceUnderflowClear \ - ADCSequenceUnderflowClear -#endif -#ifdef ROM_ADCProcessorTrigger -#define MAP_ADCProcessorTrigger \ - ROM_ADCProcessorTrigger -#else -#define MAP_ADCProcessorTrigger \ - ADCProcessorTrigger -#endif -#ifdef ROM_ADCHardwareOversampleConfigure -#define MAP_ADCHardwareOversampleConfigure \ - ROM_ADCHardwareOversampleConfigure -#else -#define MAP_ADCHardwareOversampleConfigure \ - ADCHardwareOversampleConfigure -#endif -#ifdef ROM_ADCComparatorConfigure -#define MAP_ADCComparatorConfigure \ - ROM_ADCComparatorConfigure -#else -#define MAP_ADCComparatorConfigure \ - ADCComparatorConfigure -#endif -#ifdef ROM_ADCComparatorRegionSet -#define MAP_ADCComparatorRegionSet \ - ROM_ADCComparatorRegionSet -#else -#define MAP_ADCComparatorRegionSet \ - ADCComparatorRegionSet -#endif -#ifdef ROM_ADCComparatorReset -#define MAP_ADCComparatorReset \ - ROM_ADCComparatorReset -#else -#define MAP_ADCComparatorReset \ - ADCComparatorReset -#endif -#ifdef ROM_ADCComparatorIntDisable -#define MAP_ADCComparatorIntDisable \ - ROM_ADCComparatorIntDisable -#else -#define MAP_ADCComparatorIntDisable \ - ADCComparatorIntDisable -#endif -#ifdef ROM_ADCComparatorIntEnable -#define MAP_ADCComparatorIntEnable \ - ROM_ADCComparatorIntEnable -#else -#define MAP_ADCComparatorIntEnable \ - ADCComparatorIntEnable -#endif -#ifdef ROM_ADCComparatorIntStatus -#define MAP_ADCComparatorIntStatus \ - ROM_ADCComparatorIntStatus -#else -#define MAP_ADCComparatorIntStatus \ - ADCComparatorIntStatus -#endif -#ifdef ROM_ADCComparatorIntClear -#define MAP_ADCComparatorIntClear \ - ROM_ADCComparatorIntClear -#else -#define MAP_ADCComparatorIntClear \ - ADCComparatorIntClear -#endif -#ifdef ROM_ADCReferenceSet -#define MAP_ADCReferenceSet \ - ROM_ADCReferenceSet -#else -#define MAP_ADCReferenceSet \ - ADCReferenceSet -#endif -#ifdef ROM_ADCReferenceGet -#define MAP_ADCReferenceGet \ - ROM_ADCReferenceGet -#else -#define MAP_ADCReferenceGet \ - ADCReferenceGet -#endif -#ifdef ROM_ADCPhaseDelaySet -#define MAP_ADCPhaseDelaySet \ - ROM_ADCPhaseDelaySet -#else -#define MAP_ADCPhaseDelaySet \ - ADCPhaseDelaySet -#endif -#ifdef ROM_ADCPhaseDelayGet -#define MAP_ADCPhaseDelayGet \ - ROM_ADCPhaseDelayGet -#else -#define MAP_ADCPhaseDelayGet \ - ADCPhaseDelayGet -#endif -#ifdef ROM_ADCResolutionSet -#define MAP_ADCResolutionSet \ - ROM_ADCResolutionSet -#else -#define MAP_ADCResolutionSet \ - ADCResolutionSet -#endif -#ifdef ROM_ADCResolutionGet -#define MAP_ADCResolutionGet \ - ROM_ADCResolutionGet -#else -#define MAP_ADCResolutionGet \ - ADCResolutionGet -#endif - -//***************************************************************************** -// -// Macros for the CAN API. -// -//***************************************************************************** -#ifdef ROM_CANIntClear -#define MAP_CANIntClear \ - ROM_CANIntClear -#else -#define MAP_CANIntClear \ - CANIntClear -#endif -#ifdef ROM_CANInit -#define MAP_CANInit \ - ROM_CANInit -#else -#define MAP_CANInit \ - CANInit -#endif -#ifdef ROM_CANEnable -#define MAP_CANEnable \ - ROM_CANEnable -#else -#define MAP_CANEnable \ - CANEnable -#endif -#ifdef ROM_CANDisable -#define MAP_CANDisable \ - ROM_CANDisable -#else -#define MAP_CANDisable \ - CANDisable -#endif -#ifdef ROM_CANBitTimingSet -#define MAP_CANBitTimingSet \ - ROM_CANBitTimingSet -#else -#define MAP_CANBitTimingSet \ - CANBitTimingSet -#endif -#ifdef ROM_CANBitTimingGet -#define MAP_CANBitTimingGet \ - ROM_CANBitTimingGet -#else -#define MAP_CANBitTimingGet \ - CANBitTimingGet -#endif -#ifdef ROM_CANMessageSet -#define MAP_CANMessageSet \ - ROM_CANMessageSet -#else -#define MAP_CANMessageSet \ - CANMessageSet -#endif -#ifdef ROM_CANMessageGet -#define MAP_CANMessageGet \ - ROM_CANMessageGet -#else -#define MAP_CANMessageGet \ - CANMessageGet -#endif -#ifdef ROM_CANStatusGet -#define MAP_CANStatusGet \ - ROM_CANStatusGet -#else -#define MAP_CANStatusGet \ - CANStatusGet -#endif -#ifdef ROM_CANMessageClear -#define MAP_CANMessageClear \ - ROM_CANMessageClear -#else -#define MAP_CANMessageClear \ - CANMessageClear -#endif -#ifdef ROM_CANIntEnable -#define MAP_CANIntEnable \ - ROM_CANIntEnable -#else -#define MAP_CANIntEnable \ - CANIntEnable -#endif -#ifdef ROM_CANIntDisable -#define MAP_CANIntDisable \ - ROM_CANIntDisable -#else -#define MAP_CANIntDisable \ - CANIntDisable -#endif -#ifdef ROM_CANIntStatus -#define MAP_CANIntStatus \ - ROM_CANIntStatus -#else -#define MAP_CANIntStatus \ - CANIntStatus -#endif -#ifdef ROM_CANRetryGet -#define MAP_CANRetryGet \ - ROM_CANRetryGet -#else -#define MAP_CANRetryGet \ - CANRetryGet -#endif -#ifdef ROM_CANRetrySet -#define MAP_CANRetrySet \ - ROM_CANRetrySet -#else -#define MAP_CANRetrySet \ - CANRetrySet -#endif -#ifdef ROM_CANErrCntrGet -#define MAP_CANErrCntrGet \ - ROM_CANErrCntrGet -#else -#define MAP_CANErrCntrGet \ - CANErrCntrGet -#endif -#ifdef ROM_CANBitRateSet -#define MAP_CANBitRateSet \ - ROM_CANBitRateSet -#else -#define MAP_CANBitRateSet \ - CANBitRateSet -#endif - -//***************************************************************************** -// -// Macros for the Comparator API. -// -//***************************************************************************** -#ifdef ROM_ComparatorIntClear -#define MAP_ComparatorIntClear \ - ROM_ComparatorIntClear -#else -#define MAP_ComparatorIntClear \ - ComparatorIntClear -#endif -#ifdef ROM_ComparatorConfigure -#define MAP_ComparatorConfigure \ - ROM_ComparatorConfigure -#else -#define MAP_ComparatorConfigure \ - ComparatorConfigure -#endif -#ifdef ROM_ComparatorRefSet -#define MAP_ComparatorRefSet \ - ROM_ComparatorRefSet -#else -#define MAP_ComparatorRefSet \ - ComparatorRefSet -#endif -#ifdef ROM_ComparatorValueGet -#define MAP_ComparatorValueGet \ - ROM_ComparatorValueGet -#else -#define MAP_ComparatorValueGet \ - ComparatorValueGet -#endif -#ifdef ROM_ComparatorIntEnable -#define MAP_ComparatorIntEnable \ - ROM_ComparatorIntEnable -#else -#define MAP_ComparatorIntEnable \ - ComparatorIntEnable -#endif -#ifdef ROM_ComparatorIntDisable -#define MAP_ComparatorIntDisable \ - ROM_ComparatorIntDisable -#else -#define MAP_ComparatorIntDisable \ - ComparatorIntDisable -#endif -#ifdef ROM_ComparatorIntStatus -#define MAP_ComparatorIntStatus \ - ROM_ComparatorIntStatus -#else -#define MAP_ComparatorIntStatus \ - ComparatorIntStatus -#endif - -//***************************************************************************** -// -// Macros for the EEPROM API. -// -//***************************************************************************** -#ifdef ROM_EEPROMRead -#define MAP_EEPROMRead \ - ROM_EEPROMRead -#else -#define MAP_EEPROMRead \ - EEPROMRead -#endif -#ifdef ROM_EEPROMBlockCountGet -#define MAP_EEPROMBlockCountGet \ - ROM_EEPROMBlockCountGet -#else -#define MAP_EEPROMBlockCountGet \ - EEPROMBlockCountGet -#endif -#ifdef ROM_EEPROMBlockHide -#define MAP_EEPROMBlockHide \ - ROM_EEPROMBlockHide -#else -#define MAP_EEPROMBlockHide \ - EEPROMBlockHide -#endif -#ifdef ROM_EEPROMBlockLock -#define MAP_EEPROMBlockLock \ - ROM_EEPROMBlockLock -#else -#define MAP_EEPROMBlockLock \ - EEPROMBlockLock -#endif -#ifdef ROM_EEPROMBlockPasswordSet -#define MAP_EEPROMBlockPasswordSet \ - ROM_EEPROMBlockPasswordSet -#else -#define MAP_EEPROMBlockPasswordSet \ - EEPROMBlockPasswordSet -#endif -#ifdef ROM_EEPROMBlockProtectGet -#define MAP_EEPROMBlockProtectGet \ - ROM_EEPROMBlockProtectGet -#else -#define MAP_EEPROMBlockProtectGet \ - EEPROMBlockProtectGet -#endif -#ifdef ROM_EEPROMBlockProtectSet -#define MAP_EEPROMBlockProtectSet \ - ROM_EEPROMBlockProtectSet -#else -#define MAP_EEPROMBlockProtectSet \ - EEPROMBlockProtectSet -#endif -#ifdef ROM_EEPROMBlockUnlock -#define MAP_EEPROMBlockUnlock \ - ROM_EEPROMBlockUnlock -#else -#define MAP_EEPROMBlockUnlock \ - EEPROMBlockUnlock -#endif -#ifdef ROM_EEPROMIntClear -#define MAP_EEPROMIntClear \ - ROM_EEPROMIntClear -#else -#define MAP_EEPROMIntClear \ - EEPROMIntClear -#endif -#ifdef ROM_EEPROMIntDisable -#define MAP_EEPROMIntDisable \ - ROM_EEPROMIntDisable -#else -#define MAP_EEPROMIntDisable \ - EEPROMIntDisable -#endif -#ifdef ROM_EEPROMIntEnable -#define MAP_EEPROMIntEnable \ - ROM_EEPROMIntEnable -#else -#define MAP_EEPROMIntEnable \ - EEPROMIntEnable -#endif -#ifdef ROM_EEPROMIntStatus -#define MAP_EEPROMIntStatus \ - ROM_EEPROMIntStatus -#else -#define MAP_EEPROMIntStatus \ - EEPROMIntStatus -#endif -#ifdef ROM_EEPROMMassErase -#define MAP_EEPROMMassErase \ - ROM_EEPROMMassErase -#else -#define MAP_EEPROMMassErase \ - EEPROMMassErase -#endif -#ifdef ROM_EEPROMProgram -#define MAP_EEPROMProgram \ - ROM_EEPROMProgram -#else -#define MAP_EEPROMProgram \ - EEPROMProgram -#endif -#ifdef ROM_EEPROMProgramNonBlocking -#define MAP_EEPROMProgramNonBlocking \ - ROM_EEPROMProgramNonBlocking -#else -#define MAP_EEPROMProgramNonBlocking \ - EEPROMProgramNonBlocking -#endif -#ifdef ROM_EEPROMSizeGet -#define MAP_EEPROMSizeGet \ - ROM_EEPROMSizeGet -#else -#define MAP_EEPROMSizeGet \ - EEPROMSizeGet -#endif -#ifdef ROM_EEPROMStatusGet -#define MAP_EEPROMStatusGet \ - ROM_EEPROMStatusGet -#else -#define MAP_EEPROMStatusGet \ - EEPROMStatusGet -#endif -#ifdef ROM_EEPROMInit -#define MAP_EEPROMInit \ - ROM_EEPROMInit -#else -#define MAP_EEPROMInit \ - EEPROMInit -#endif - -//***************************************************************************** -// -// Macros for the EPI API. -// -//***************************************************************************** -#ifdef ROM_EPIIntStatus -#define MAP_EPIIntStatus \ - ROM_EPIIntStatus -#else -#define MAP_EPIIntStatus \ - EPIIntStatus -#endif -#ifdef ROM_EPIModeSet -#define MAP_EPIModeSet \ - ROM_EPIModeSet -#else -#define MAP_EPIModeSet \ - EPIModeSet -#endif -#ifdef ROM_EPIDividerSet -#define MAP_EPIDividerSet \ - ROM_EPIDividerSet -#else -#define MAP_EPIDividerSet \ - EPIDividerSet -#endif -#ifdef ROM_EPIConfigSDRAMSet -#define MAP_EPIConfigSDRAMSet \ - ROM_EPIConfigSDRAMSet -#else -#define MAP_EPIConfigSDRAMSet \ - EPIConfigSDRAMSet -#endif -#ifdef ROM_EPIConfigGPModeSet -#define MAP_EPIConfigGPModeSet \ - ROM_EPIConfigGPModeSet -#else -#define MAP_EPIConfigGPModeSet \ - EPIConfigGPModeSet -#endif -#ifdef ROM_EPIConfigHB8Set -#define MAP_EPIConfigHB8Set \ - ROM_EPIConfigHB8Set -#else -#define MAP_EPIConfigHB8Set \ - EPIConfigHB8Set -#endif -#ifdef ROM_EPIConfigHB16Set -#define MAP_EPIConfigHB16Set \ - ROM_EPIConfigHB16Set -#else -#define MAP_EPIConfigHB16Set \ - EPIConfigHB16Set -#endif -#ifdef ROM_EPIAddressMapSet -#define MAP_EPIAddressMapSet \ - ROM_EPIAddressMapSet -#else -#define MAP_EPIAddressMapSet \ - EPIAddressMapSet -#endif -#ifdef ROM_EPINonBlockingReadConfigure -#define MAP_EPINonBlockingReadConfigure \ - ROM_EPINonBlockingReadConfigure -#else -#define MAP_EPINonBlockingReadConfigure \ - EPINonBlockingReadConfigure -#endif -#ifdef ROM_EPINonBlockingReadStart -#define MAP_EPINonBlockingReadStart \ - ROM_EPINonBlockingReadStart -#else -#define MAP_EPINonBlockingReadStart \ - EPINonBlockingReadStart -#endif -#ifdef ROM_EPINonBlockingReadStop -#define MAP_EPINonBlockingReadStop \ - ROM_EPINonBlockingReadStop -#else -#define MAP_EPINonBlockingReadStop \ - EPINonBlockingReadStop -#endif -#ifdef ROM_EPINonBlockingReadCount -#define MAP_EPINonBlockingReadCount \ - ROM_EPINonBlockingReadCount -#else -#define MAP_EPINonBlockingReadCount \ - EPINonBlockingReadCount -#endif -#ifdef ROM_EPINonBlockingReadAvail -#define MAP_EPINonBlockingReadAvail \ - ROM_EPINonBlockingReadAvail -#else -#define MAP_EPINonBlockingReadAvail \ - EPINonBlockingReadAvail -#endif -#ifdef ROM_EPINonBlockingReadGet32 -#define MAP_EPINonBlockingReadGet32 \ - ROM_EPINonBlockingReadGet32 -#else -#define MAP_EPINonBlockingReadGet32 \ - EPINonBlockingReadGet32 -#endif -#ifdef ROM_EPINonBlockingReadGet16 -#define MAP_EPINonBlockingReadGet16 \ - ROM_EPINonBlockingReadGet16 -#else -#define MAP_EPINonBlockingReadGet16 \ - EPINonBlockingReadGet16 -#endif -#ifdef ROM_EPINonBlockingReadGet8 -#define MAP_EPINonBlockingReadGet8 \ - ROM_EPINonBlockingReadGet8 -#else -#define MAP_EPINonBlockingReadGet8 \ - EPINonBlockingReadGet8 -#endif -#ifdef ROM_EPIFIFOConfig -#define MAP_EPIFIFOConfig \ - ROM_EPIFIFOConfig -#else -#define MAP_EPIFIFOConfig \ - EPIFIFOConfig -#endif -#ifdef ROM_EPIWriteFIFOCountGet -#define MAP_EPIWriteFIFOCountGet \ - ROM_EPIWriteFIFOCountGet -#else -#define MAP_EPIWriteFIFOCountGet \ - EPIWriteFIFOCountGet -#endif -#ifdef ROM_EPIIntEnable -#define MAP_EPIIntEnable \ - ROM_EPIIntEnable -#else -#define MAP_EPIIntEnable \ - EPIIntEnable -#endif -#ifdef ROM_EPIIntDisable -#define MAP_EPIIntDisable \ - ROM_EPIIntDisable -#else -#define MAP_EPIIntDisable \ - EPIIntDisable -#endif -#ifdef ROM_EPIIntErrorStatus -#define MAP_EPIIntErrorStatus \ - ROM_EPIIntErrorStatus -#else -#define MAP_EPIIntErrorStatus \ - EPIIntErrorStatus -#endif -#ifdef ROM_EPIIntErrorClear -#define MAP_EPIIntErrorClear \ - ROM_EPIIntErrorClear -#else -#define MAP_EPIIntErrorClear \ - EPIIntErrorClear -#endif - -//***************************************************************************** -// -// Macros for the Ethernet API. -// -//***************************************************************************** -#ifdef ROM_EthernetIntClear -#define MAP_EthernetIntClear \ - ROM_EthernetIntClear -#else -#define MAP_EthernetIntClear \ - EthernetIntClear -#endif -#ifdef ROM_EthernetInitExpClk -#define MAP_EthernetInitExpClk \ - ROM_EthernetInitExpClk -#else -#define MAP_EthernetInitExpClk \ - EthernetInitExpClk -#endif -#ifdef ROM_EthernetConfigSet -#define MAP_EthernetConfigSet \ - ROM_EthernetConfigSet -#else -#define MAP_EthernetConfigSet \ - EthernetConfigSet -#endif -#ifdef ROM_EthernetConfigGet -#define MAP_EthernetConfigGet \ - ROM_EthernetConfigGet -#else -#define MAP_EthernetConfigGet \ - EthernetConfigGet -#endif -#ifdef ROM_EthernetMACAddrSet -#define MAP_EthernetMACAddrSet \ - ROM_EthernetMACAddrSet -#else -#define MAP_EthernetMACAddrSet \ - EthernetMACAddrSet -#endif -#ifdef ROM_EthernetMACAddrGet -#define MAP_EthernetMACAddrGet \ - ROM_EthernetMACAddrGet -#else -#define MAP_EthernetMACAddrGet \ - EthernetMACAddrGet -#endif -#ifdef ROM_EthernetEnable -#define MAP_EthernetEnable \ - ROM_EthernetEnable -#else -#define MAP_EthernetEnable \ - EthernetEnable -#endif -#ifdef ROM_EthernetDisable -#define MAP_EthernetDisable \ - ROM_EthernetDisable -#else -#define MAP_EthernetDisable \ - EthernetDisable -#endif -#ifdef ROM_EthernetPacketAvail -#define MAP_EthernetPacketAvail \ - ROM_EthernetPacketAvail -#else -#define MAP_EthernetPacketAvail \ - EthernetPacketAvail -#endif -#ifdef ROM_EthernetSpaceAvail -#define MAP_EthernetSpaceAvail \ - ROM_EthernetSpaceAvail -#else -#define MAP_EthernetSpaceAvail \ - EthernetSpaceAvail -#endif -#ifdef ROM_EthernetPacketGetNonBlocking -#define MAP_EthernetPacketGetNonBlocking \ - ROM_EthernetPacketGetNonBlocking -#else -#define MAP_EthernetPacketGetNonBlocking \ - EthernetPacketGetNonBlocking -#endif -#ifdef ROM_EthernetPacketGet -#define MAP_EthernetPacketGet \ - ROM_EthernetPacketGet -#else -#define MAP_EthernetPacketGet \ - EthernetPacketGet -#endif -#ifdef ROM_EthernetPacketPutNonBlocking -#define MAP_EthernetPacketPutNonBlocking \ - ROM_EthernetPacketPutNonBlocking -#else -#define MAP_EthernetPacketPutNonBlocking \ - EthernetPacketPutNonBlocking -#endif -#ifdef ROM_EthernetPacketPut -#define MAP_EthernetPacketPut \ - ROM_EthernetPacketPut -#else -#define MAP_EthernetPacketPut \ - EthernetPacketPut -#endif -#ifdef ROM_EthernetIntEnable -#define MAP_EthernetIntEnable \ - ROM_EthernetIntEnable -#else -#define MAP_EthernetIntEnable \ - EthernetIntEnable -#endif -#ifdef ROM_EthernetIntDisable -#define MAP_EthernetIntDisable \ - ROM_EthernetIntDisable -#else -#define MAP_EthernetIntDisable \ - EthernetIntDisable -#endif -#ifdef ROM_EthernetIntStatus -#define MAP_EthernetIntStatus \ - ROM_EthernetIntStatus -#else -#define MAP_EthernetIntStatus \ - EthernetIntStatus -#endif -#ifdef ROM_EthernetPHYWrite -#define MAP_EthernetPHYWrite \ - ROM_EthernetPHYWrite -#else -#define MAP_EthernetPHYWrite \ - EthernetPHYWrite -#endif -#ifdef ROM_EthernetPHYRead -#define MAP_EthernetPHYRead \ - ROM_EthernetPHYRead -#else -#define MAP_EthernetPHYRead \ - EthernetPHYRead -#endif -#ifdef ROM_EthernetPHYAddrSet -#define MAP_EthernetPHYAddrSet \ - ROM_EthernetPHYAddrSet -#else -#define MAP_EthernetPHYAddrSet \ - EthernetPHYAddrSet -#endif -#ifdef ROM_EthernetPHYPowerOff -#define MAP_EthernetPHYPowerOff \ - ROM_EthernetPHYPowerOff -#else -#define MAP_EthernetPHYPowerOff \ - EthernetPHYPowerOff -#endif -#ifdef ROM_EthernetPHYPowerOn -#define MAP_EthernetPHYPowerOn \ - ROM_EthernetPHYPowerOn -#else -#define MAP_EthernetPHYPowerOn \ - EthernetPHYPowerOn -#endif - -//***************************************************************************** -// -// Macros for the Fan API. -// -//***************************************************************************** -#ifdef ROM_FanIntClear -#define MAP_FanIntClear \ - ROM_FanIntClear -#else -#define MAP_FanIntClear \ - FanIntClear -#endif -#ifdef ROM_FanChannelConfigAuto -#define MAP_FanChannelConfigAuto \ - ROM_FanChannelConfigAuto -#else -#define MAP_FanChannelConfigAuto \ - FanChannelConfigAuto -#endif -#ifdef ROM_FanChannelConfigManual -#define MAP_FanChannelConfigManual \ - ROM_FanChannelConfigManual -#else -#define MAP_FanChannelConfigManual \ - FanChannelConfigManual -#endif -#ifdef ROM_FanChannelDisable -#define MAP_FanChannelDisable \ - ROM_FanChannelDisable -#else -#define MAP_FanChannelDisable \ - FanChannelDisable -#endif -#ifdef ROM_FanChannelDutyGet -#define MAP_FanChannelDutyGet \ - ROM_FanChannelDutyGet -#else -#define MAP_FanChannelDutyGet \ - FanChannelDutyGet -#endif -#ifdef ROM_FanChannelDutySet -#define MAP_FanChannelDutySet \ - ROM_FanChannelDutySet -#else -#define MAP_FanChannelDutySet \ - FanChannelDutySet -#endif -#ifdef ROM_FanChannelEnable -#define MAP_FanChannelEnable \ - ROM_FanChannelEnable -#else -#define MAP_FanChannelEnable \ - FanChannelEnable -#endif -#ifdef ROM_FanChannelRPMGet -#define MAP_FanChannelRPMGet \ - ROM_FanChannelRPMGet -#else -#define MAP_FanChannelRPMGet \ - FanChannelRPMGet -#endif -#ifdef ROM_FanChannelRPMSet -#define MAP_FanChannelRPMSet \ - ROM_FanChannelRPMSet -#else -#define MAP_FanChannelRPMSet \ - FanChannelRPMSet -#endif -#ifdef ROM_FanChannelStatus -#define MAP_FanChannelStatus \ - ROM_FanChannelStatus -#else -#define MAP_FanChannelStatus \ - FanChannelStatus -#endif -#ifdef ROM_FanChannelsGet -#define MAP_FanChannelsGet \ - ROM_FanChannelsGet -#else -#define MAP_FanChannelsGet \ - FanChannelsGet -#endif -#ifdef ROM_FanIntDisable -#define MAP_FanIntDisable \ - ROM_FanIntDisable -#else -#define MAP_FanIntDisable \ - FanIntDisable -#endif -#ifdef ROM_FanIntEnable -#define MAP_FanIntEnable \ - ROM_FanIntEnable -#else -#define MAP_FanIntEnable \ - FanIntEnable -#endif -#ifdef ROM_FanIntStatus -#define MAP_FanIntStatus \ - ROM_FanIntStatus -#else -#define MAP_FanIntStatus \ - FanIntStatus -#endif - -//***************************************************************************** -// -// Macros for the Flash API. -// -//***************************************************************************** -#ifdef ROM_FlashProgram -#define MAP_FlashProgram \ - ROM_FlashProgram -#else -#define MAP_FlashProgram \ - FlashProgram -#endif -#ifdef ROM_FlashUsecGet -#define MAP_FlashUsecGet \ - ROM_FlashUsecGet -#else -#define MAP_FlashUsecGet \ - FlashUsecGet -#endif -#ifdef ROM_FlashUsecSet -#define MAP_FlashUsecSet \ - ROM_FlashUsecSet -#else -#define MAP_FlashUsecSet \ - FlashUsecSet -#endif -#ifdef ROM_FlashErase -#define MAP_FlashErase \ - ROM_FlashErase -#else -#define MAP_FlashErase \ - FlashErase -#endif -#ifdef ROM_FlashProtectGet -#define MAP_FlashProtectGet \ - ROM_FlashProtectGet -#else -#define MAP_FlashProtectGet \ - FlashProtectGet -#endif -#ifdef ROM_FlashProtectSet -#define MAP_FlashProtectSet \ - ROM_FlashProtectSet -#else -#define MAP_FlashProtectSet \ - FlashProtectSet -#endif -#ifdef ROM_FlashProtectSave -#define MAP_FlashProtectSave \ - ROM_FlashProtectSave -#else -#define MAP_FlashProtectSave \ - FlashProtectSave -#endif -#ifdef ROM_FlashUserGet -#define MAP_FlashUserGet \ - ROM_FlashUserGet -#else -#define MAP_FlashUserGet \ - FlashUserGet -#endif -#ifdef ROM_FlashUserSet -#define MAP_FlashUserSet \ - ROM_FlashUserSet -#else -#define MAP_FlashUserSet \ - FlashUserSet -#endif -#ifdef ROM_FlashUserSave -#define MAP_FlashUserSave \ - ROM_FlashUserSave -#else -#define MAP_FlashUserSave \ - FlashUserSave -#endif -#ifdef ROM_FlashIntEnable -#define MAP_FlashIntEnable \ - ROM_FlashIntEnable -#else -#define MAP_FlashIntEnable \ - FlashIntEnable -#endif -#ifdef ROM_FlashIntDisable -#define MAP_FlashIntDisable \ - ROM_FlashIntDisable -#else -#define MAP_FlashIntDisable \ - FlashIntDisable -#endif -#ifdef ROM_FlashIntStatus -#define MAP_FlashIntStatus \ - ROM_FlashIntStatus -#else -#define MAP_FlashIntStatus \ - FlashIntStatus -#endif -#ifdef ROM_FlashIntClear -#define MAP_FlashIntClear \ - ROM_FlashIntClear -#else -#define MAP_FlashIntClear \ - FlashIntClear -#endif - -//***************************************************************************** -// -// Macros for the FPU API. -// -//***************************************************************************** -#ifdef ROM_FPUEnable -#define MAP_FPUEnable \ - ROM_FPUEnable -#else -#define MAP_FPUEnable \ - FPUEnable -#endif -#ifdef ROM_FPUDisable -#define MAP_FPUDisable \ - ROM_FPUDisable -#else -#define MAP_FPUDisable \ - FPUDisable -#endif -#ifdef ROM_FPUFlushToZeroModeSet -#define MAP_FPUFlushToZeroModeSet \ - ROM_FPUFlushToZeroModeSet -#else -#define MAP_FPUFlushToZeroModeSet \ - FPUFlushToZeroModeSet -#endif -#ifdef ROM_FPUHalfPrecisionModeSet -#define MAP_FPUHalfPrecisionModeSet \ - ROM_FPUHalfPrecisionModeSet -#else -#define MAP_FPUHalfPrecisionModeSet \ - FPUHalfPrecisionModeSet -#endif -#ifdef ROM_FPULazyStackingEnable -#define MAP_FPULazyStackingEnable \ - ROM_FPULazyStackingEnable -#else -#define MAP_FPULazyStackingEnable \ - FPULazyStackingEnable -#endif -#ifdef ROM_FPUNaNModeSet -#define MAP_FPUNaNModeSet \ - ROM_FPUNaNModeSet -#else -#define MAP_FPUNaNModeSet \ - FPUNaNModeSet -#endif -#ifdef ROM_FPURoundingModeSet -#define MAP_FPURoundingModeSet \ - ROM_FPURoundingModeSet -#else -#define MAP_FPURoundingModeSet \ - FPURoundingModeSet -#endif -#ifdef ROM_FPUStackingDisable -#define MAP_FPUStackingDisable \ - ROM_FPUStackingDisable -#else -#define MAP_FPUStackingDisable \ - FPUStackingDisable -#endif -#ifdef ROM_FPUStackingEnable -#define MAP_FPUStackingEnable \ - ROM_FPUStackingEnable -#else -#define MAP_FPUStackingEnable \ - FPUStackingEnable -#endif - -//***************************************************************************** -// -// Macros for the GPIO API. -// -//***************************************************************************** -#ifdef ROM_GPIOPinWrite -#define MAP_GPIOPinWrite \ - ROM_GPIOPinWrite -#else -#define MAP_GPIOPinWrite \ - GPIOPinWrite -#endif -#ifdef ROM_GPIODirModeSet -#define MAP_GPIODirModeSet \ - ROM_GPIODirModeSet -#else -#define MAP_GPIODirModeSet \ - GPIODirModeSet -#endif -#ifdef ROM_GPIODirModeGet -#define MAP_GPIODirModeGet \ - ROM_GPIODirModeGet -#else -#define MAP_GPIODirModeGet \ - GPIODirModeGet -#endif -#ifdef ROM_GPIOIntTypeSet -#define MAP_GPIOIntTypeSet \ - ROM_GPIOIntTypeSet -#else -#define MAP_GPIOIntTypeSet \ - GPIOIntTypeSet -#endif -#ifdef ROM_GPIOIntTypeGet -#define MAP_GPIOIntTypeGet \ - ROM_GPIOIntTypeGet -#else -#define MAP_GPIOIntTypeGet \ - GPIOIntTypeGet -#endif -#ifdef ROM_GPIOPadConfigSet -#define MAP_GPIOPadConfigSet \ - ROM_GPIOPadConfigSet -#else -#define MAP_GPIOPadConfigSet \ - GPIOPadConfigSet -#endif -#ifdef ROM_GPIOPadConfigGet -#define MAP_GPIOPadConfigGet \ - ROM_GPIOPadConfigGet -#else -#define MAP_GPIOPadConfigGet \ - GPIOPadConfigGet -#endif -#ifdef ROM_GPIOPinIntEnable -#define MAP_GPIOPinIntEnable \ - ROM_GPIOPinIntEnable -#else -#define MAP_GPIOPinIntEnable \ - GPIOPinIntEnable -#endif -#ifdef ROM_GPIOPinIntDisable -#define MAP_GPIOPinIntDisable \ - ROM_GPIOPinIntDisable -#else -#define MAP_GPIOPinIntDisable \ - GPIOPinIntDisable -#endif -#ifdef ROM_GPIOPinIntStatus -#define MAP_GPIOPinIntStatus \ - ROM_GPIOPinIntStatus -#else -#define MAP_GPIOPinIntStatus \ - GPIOPinIntStatus -#endif -#ifdef ROM_GPIOPinIntClear -#define MAP_GPIOPinIntClear \ - ROM_GPIOPinIntClear -#else -#define MAP_GPIOPinIntClear \ - GPIOPinIntClear -#endif -#ifdef ROM_GPIOPinRead -#define MAP_GPIOPinRead \ - ROM_GPIOPinRead -#else -#define MAP_GPIOPinRead \ - GPIOPinRead -#endif -#ifdef ROM_GPIOPinTypeCAN -#define MAP_GPIOPinTypeCAN \ - ROM_GPIOPinTypeCAN -#else -#define MAP_GPIOPinTypeCAN \ - GPIOPinTypeCAN -#endif -#ifdef ROM_GPIOPinTypeComparator -#define MAP_GPIOPinTypeComparator \ - ROM_GPIOPinTypeComparator -#else -#define MAP_GPIOPinTypeComparator \ - GPIOPinTypeComparator -#endif -#ifdef ROM_GPIOPinTypeGPIOInput -#define MAP_GPIOPinTypeGPIOInput \ - ROM_GPIOPinTypeGPIOInput -#else -#define MAP_GPIOPinTypeGPIOInput \ - GPIOPinTypeGPIOInput -#endif -#ifdef ROM_GPIOPinTypeGPIOOutput -#define MAP_GPIOPinTypeGPIOOutput \ - ROM_GPIOPinTypeGPIOOutput -#else -#define MAP_GPIOPinTypeGPIOOutput \ - GPIOPinTypeGPIOOutput -#endif -#ifdef ROM_GPIOPinTypeI2C -#define MAP_GPIOPinTypeI2C \ - ROM_GPIOPinTypeI2C -#else -#define MAP_GPIOPinTypeI2C \ - GPIOPinTypeI2C -#endif -#ifdef ROM_GPIOPinTypePWM -#define MAP_GPIOPinTypePWM \ - ROM_GPIOPinTypePWM -#else -#define MAP_GPIOPinTypePWM \ - GPIOPinTypePWM -#endif -#ifdef ROM_GPIOPinTypeQEI -#define MAP_GPIOPinTypeQEI \ - ROM_GPIOPinTypeQEI -#else -#define MAP_GPIOPinTypeQEI \ - GPIOPinTypeQEI -#endif -#ifdef ROM_GPIOPinTypeSSI -#define MAP_GPIOPinTypeSSI \ - ROM_GPIOPinTypeSSI -#else -#define MAP_GPIOPinTypeSSI \ - GPIOPinTypeSSI -#endif -#ifdef ROM_GPIOPinTypeTimer -#define MAP_GPIOPinTypeTimer \ - ROM_GPIOPinTypeTimer -#else -#define MAP_GPIOPinTypeTimer \ - GPIOPinTypeTimer -#endif -#ifdef ROM_GPIOPinTypeUART -#define MAP_GPIOPinTypeUART \ - ROM_GPIOPinTypeUART -#else -#define MAP_GPIOPinTypeUART \ - GPIOPinTypeUART -#endif -#ifdef ROM_GPIOPinTypeGPIOOutputOD -#define MAP_GPIOPinTypeGPIOOutputOD \ - ROM_GPIOPinTypeGPIOOutputOD -#else -#define MAP_GPIOPinTypeGPIOOutputOD \ - GPIOPinTypeGPIOOutputOD -#endif -#ifdef ROM_GPIOPinTypeADC -#define MAP_GPIOPinTypeADC \ - ROM_GPIOPinTypeADC -#else -#define MAP_GPIOPinTypeADC \ - GPIOPinTypeADC -#endif -#ifdef ROM_GPIOPinTypeUSBDigital -#define MAP_GPIOPinTypeUSBDigital \ - ROM_GPIOPinTypeUSBDigital -#else -#define MAP_GPIOPinTypeUSBDigital \ - GPIOPinTypeUSBDigital -#endif -#ifdef ROM_GPIOPinTypeI2S -#define MAP_GPIOPinTypeI2S \ - ROM_GPIOPinTypeI2S -#else -#define MAP_GPIOPinTypeI2S \ - GPIOPinTypeI2S -#endif -#ifdef ROM_GPIOPinConfigure -#define MAP_GPIOPinConfigure \ - ROM_GPIOPinConfigure -#else -#define MAP_GPIOPinConfigure \ - GPIOPinConfigure -#endif -#ifdef ROM_GPIOPinTypeEthernetLED -#define MAP_GPIOPinTypeEthernetLED \ - ROM_GPIOPinTypeEthernetLED -#else -#define MAP_GPIOPinTypeEthernetLED \ - GPIOPinTypeEthernetLED -#endif -#ifdef ROM_GPIOPinTypeUSBAnalog -#define MAP_GPIOPinTypeUSBAnalog \ - ROM_GPIOPinTypeUSBAnalog -#else -#define MAP_GPIOPinTypeUSBAnalog \ - GPIOPinTypeUSBAnalog -#endif -#ifdef ROM_GPIOPinTypeEPI -#define MAP_GPIOPinTypeEPI \ - ROM_GPIOPinTypeEPI -#else -#define MAP_GPIOPinTypeEPI \ - GPIOPinTypeEPI -#endif -#ifdef ROM_GPIOPinTypeEthernetMII -#define MAP_GPIOPinTypeEthernetMII \ - ROM_GPIOPinTypeEthernetMII -#else -#define MAP_GPIOPinTypeEthernetMII \ - GPIOPinTypeEthernetMII -#endif -#ifdef ROM_GPIODMATriggerEnable -#define MAP_GPIODMATriggerEnable \ - ROM_GPIODMATriggerEnable -#else -#define MAP_GPIODMATriggerEnable \ - GPIODMATriggerEnable -#endif -#ifdef ROM_GPIODMATriggerDisable -#define MAP_GPIODMATriggerDisable \ - ROM_GPIODMATriggerDisable -#else -#define MAP_GPIODMATriggerDisable \ - GPIODMATriggerDisable -#endif -#ifdef ROM_GPIOADCTriggerEnable -#define MAP_GPIOADCTriggerEnable \ - ROM_GPIOADCTriggerEnable -#else -#define MAP_GPIOADCTriggerEnable \ - GPIOADCTriggerEnable -#endif -#ifdef ROM_GPIOADCTriggerDisable -#define MAP_GPIOADCTriggerDisable \ - ROM_GPIOADCTriggerDisable -#else -#define MAP_GPIOADCTriggerDisable \ - GPIOADCTriggerDisable -#endif -#ifdef ROM_GPIOPinTypeFan -#define MAP_GPIOPinTypeFan \ - ROM_GPIOPinTypeFan -#else -#define MAP_GPIOPinTypeFan \ - GPIOPinTypeFan -#endif -#ifdef ROM_GPIOPinTypeLPC -#define MAP_GPIOPinTypeLPC \ - ROM_GPIOPinTypeLPC -#else -#define MAP_GPIOPinTypeLPC \ - GPIOPinTypeLPC -#endif -#ifdef ROM_GPIOPinTypePECIRx -#define MAP_GPIOPinTypePECIRx \ - ROM_GPIOPinTypePECIRx -#else -#define MAP_GPIOPinTypePECIRx \ - GPIOPinTypePECIRx -#endif -#ifdef ROM_GPIOPinTypePECITx -#define MAP_GPIOPinTypePECITx \ - ROM_GPIOPinTypePECITx -#else -#define MAP_GPIOPinTypePECITx \ - GPIOPinTypePECITx -#endif -#ifdef ROM_GPIOPinTypeI2CSCL -#define MAP_GPIOPinTypeI2CSCL \ - ROM_GPIOPinTypeI2CSCL -#else -#define MAP_GPIOPinTypeI2CSCL \ - GPIOPinTypeI2CSCL -#endif - -//***************************************************************************** -// -// Macros for the Hibernate API. -// -//***************************************************************************** -#ifdef ROM_HibernateIntClear -#define MAP_HibernateIntClear \ - ROM_HibernateIntClear -#else -#define MAP_HibernateIntClear \ - HibernateIntClear -#endif -#ifdef ROM_HibernateEnableExpClk -#define MAP_HibernateEnableExpClk \ - ROM_HibernateEnableExpClk -#else -#define MAP_HibernateEnableExpClk \ - HibernateEnableExpClk -#endif -#ifdef ROM_HibernateDisable -#define MAP_HibernateDisable \ - ROM_HibernateDisable -#else -#define MAP_HibernateDisable \ - HibernateDisable -#endif -#ifdef ROM_HibernateClockSelect -#define MAP_HibernateClockSelect \ - ROM_HibernateClockSelect -#else -#define MAP_HibernateClockSelect \ - HibernateClockSelect -#endif -#ifdef ROM_HibernateRTCEnable -#define MAP_HibernateRTCEnable \ - ROM_HibernateRTCEnable -#else -#define MAP_HibernateRTCEnable \ - HibernateRTCEnable -#endif -#ifdef ROM_HibernateRTCDisable -#define MAP_HibernateRTCDisable \ - ROM_HibernateRTCDisable -#else -#define MAP_HibernateRTCDisable \ - HibernateRTCDisable -#endif -#ifdef ROM_HibernateWakeSet -#define MAP_HibernateWakeSet \ - ROM_HibernateWakeSet -#else -#define MAP_HibernateWakeSet \ - HibernateWakeSet -#endif -#ifdef ROM_HibernateWakeGet -#define MAP_HibernateWakeGet \ - ROM_HibernateWakeGet -#else -#define MAP_HibernateWakeGet \ - HibernateWakeGet -#endif -#ifdef ROM_HibernateLowBatSet -#define MAP_HibernateLowBatSet \ - ROM_HibernateLowBatSet -#else -#define MAP_HibernateLowBatSet \ - HibernateLowBatSet -#endif -#ifdef ROM_HibernateLowBatGet -#define MAP_HibernateLowBatGet \ - ROM_HibernateLowBatGet -#else -#define MAP_HibernateLowBatGet \ - HibernateLowBatGet -#endif -#ifdef ROM_HibernateRTCSet -#define MAP_HibernateRTCSet \ - ROM_HibernateRTCSet -#else -#define MAP_HibernateRTCSet \ - HibernateRTCSet -#endif -#ifdef ROM_HibernateRTCGet -#define MAP_HibernateRTCGet \ - ROM_HibernateRTCGet -#else -#define MAP_HibernateRTCGet \ - HibernateRTCGet -#endif -#ifdef ROM_HibernateRTCMatch0Set -#define MAP_HibernateRTCMatch0Set \ - ROM_HibernateRTCMatch0Set -#else -#define MAP_HibernateRTCMatch0Set \ - HibernateRTCMatch0Set -#endif -#ifdef ROM_HibernateRTCMatch0Get -#define MAP_HibernateRTCMatch0Get \ - ROM_HibernateRTCMatch0Get -#else -#define MAP_HibernateRTCMatch0Get \ - HibernateRTCMatch0Get -#endif -#ifdef ROM_HibernateRTCMatch1Set -#define MAP_HibernateRTCMatch1Set \ - ROM_HibernateRTCMatch1Set -#else -#define MAP_HibernateRTCMatch1Set \ - HibernateRTCMatch1Set -#endif -#ifdef ROM_HibernateRTCMatch1Get -#define MAP_HibernateRTCMatch1Get \ - ROM_HibernateRTCMatch1Get -#else -#define MAP_HibernateRTCMatch1Get \ - HibernateRTCMatch1Get -#endif -#ifdef ROM_HibernateRTCTrimSet -#define MAP_HibernateRTCTrimSet \ - ROM_HibernateRTCTrimSet -#else -#define MAP_HibernateRTCTrimSet \ - HibernateRTCTrimSet -#endif -#ifdef ROM_HibernateRTCTrimGet -#define MAP_HibernateRTCTrimGet \ - ROM_HibernateRTCTrimGet -#else -#define MAP_HibernateRTCTrimGet \ - HibernateRTCTrimGet -#endif -#ifdef ROM_HibernateDataSet -#define MAP_HibernateDataSet \ - ROM_HibernateDataSet -#else -#define MAP_HibernateDataSet \ - HibernateDataSet -#endif -#ifdef ROM_HibernateDataGet -#define MAP_HibernateDataGet \ - ROM_HibernateDataGet -#else -#define MAP_HibernateDataGet \ - HibernateDataGet -#endif -#ifdef ROM_HibernateRequest -#define MAP_HibernateRequest \ - ROM_HibernateRequest -#else -#define MAP_HibernateRequest \ - HibernateRequest -#endif -#ifdef ROM_HibernateIntEnable -#define MAP_HibernateIntEnable \ - ROM_HibernateIntEnable -#else -#define MAP_HibernateIntEnable \ - HibernateIntEnable -#endif -#ifdef ROM_HibernateIntDisable -#define MAP_HibernateIntDisable \ - ROM_HibernateIntDisable -#else -#define MAP_HibernateIntDisable \ - HibernateIntDisable -#endif -#ifdef ROM_HibernateIntStatus -#define MAP_HibernateIntStatus \ - ROM_HibernateIntStatus -#else -#define MAP_HibernateIntStatus \ - HibernateIntStatus -#endif -#ifdef ROM_HibernateIsActive -#define MAP_HibernateIsActive \ - ROM_HibernateIsActive -#else -#define MAP_HibernateIsActive \ - HibernateIsActive -#endif -#ifdef ROM_HibernateRTCSSMatch0Set -#define MAP_HibernateRTCSSMatch0Set \ - ROM_HibernateRTCSSMatch0Set -#else -#define MAP_HibernateRTCSSMatch0Set \ - HibernateRTCSSMatch0Set -#endif -#ifdef ROM_HibernateRTCSSMatch0Get -#define MAP_HibernateRTCSSMatch0Get \ - ROM_HibernateRTCSSMatch0Get -#else -#define MAP_HibernateRTCSSMatch0Get \ - HibernateRTCSSMatch0Get -#endif -#ifdef ROM_HibernateRTCSSGet -#define MAP_HibernateRTCSSGet \ - ROM_HibernateRTCSSGet -#else -#define MAP_HibernateRTCSSGet \ - HibernateRTCSSGet -#endif -#ifdef ROM_HibernateClockConfig -#define MAP_HibernateClockConfig \ - ROM_HibernateClockConfig -#else -#define MAP_HibernateClockConfig \ - HibernateClockConfig -#endif -#ifdef ROM_HibernateBatCheckStart -#define MAP_HibernateBatCheckStart \ - ROM_HibernateBatCheckStart -#else -#define MAP_HibernateBatCheckStart \ - HibernateBatCheckStart -#endif -#ifdef ROM_HibernateBatCheckDone -#define MAP_HibernateBatCheckDone \ - ROM_HibernateBatCheckDone -#else -#define MAP_HibernateBatCheckDone \ - HibernateBatCheckDone -#endif - -//***************************************************************************** -// -// Macros for the I2C API. -// -//***************************************************************************** -#ifdef ROM_I2CMasterDataPut -#define MAP_I2CMasterDataPut \ - ROM_I2CMasterDataPut -#else -#define MAP_I2CMasterDataPut \ - I2CMasterDataPut -#endif -#ifdef ROM_I2CMasterInitExpClk -#define MAP_I2CMasterInitExpClk \ - ROM_I2CMasterInitExpClk -#else -#define MAP_I2CMasterInitExpClk \ - I2CMasterInitExpClk -#endif -#ifdef ROM_I2CSlaveInit -#define MAP_I2CSlaveInit \ - ROM_I2CSlaveInit -#else -#define MAP_I2CSlaveInit \ - I2CSlaveInit -#endif -#ifdef ROM_I2CMasterEnable -#define MAP_I2CMasterEnable \ - ROM_I2CMasterEnable -#else -#define MAP_I2CMasterEnable \ - I2CMasterEnable -#endif -#ifdef ROM_I2CSlaveEnable -#define MAP_I2CSlaveEnable \ - ROM_I2CSlaveEnable -#else -#define MAP_I2CSlaveEnable \ - I2CSlaveEnable -#endif -#ifdef ROM_I2CMasterDisable -#define MAP_I2CMasterDisable \ - ROM_I2CMasterDisable -#else -#define MAP_I2CMasterDisable \ - I2CMasterDisable -#endif -#ifdef ROM_I2CSlaveDisable -#define MAP_I2CSlaveDisable \ - ROM_I2CSlaveDisable -#else -#define MAP_I2CSlaveDisable \ - I2CSlaveDisable -#endif -#ifdef ROM_I2CMasterIntEnable -#define MAP_I2CMasterIntEnable \ - ROM_I2CMasterIntEnable -#else -#define MAP_I2CMasterIntEnable \ - I2CMasterIntEnable -#endif -#ifdef ROM_I2CSlaveIntEnable -#define MAP_I2CSlaveIntEnable \ - ROM_I2CSlaveIntEnable -#else -#define MAP_I2CSlaveIntEnable \ - I2CSlaveIntEnable -#endif -#ifdef ROM_I2CMasterIntDisable -#define MAP_I2CMasterIntDisable \ - ROM_I2CMasterIntDisable -#else -#define MAP_I2CMasterIntDisable \ - I2CMasterIntDisable -#endif -#ifdef ROM_I2CSlaveIntDisable -#define MAP_I2CSlaveIntDisable \ - ROM_I2CSlaveIntDisable -#else -#define MAP_I2CSlaveIntDisable \ - I2CSlaveIntDisable -#endif -#ifdef ROM_I2CMasterIntStatus -#define MAP_I2CMasterIntStatus \ - ROM_I2CMasterIntStatus -#else -#define MAP_I2CMasterIntStatus \ - I2CMasterIntStatus -#endif -#ifdef ROM_I2CSlaveIntStatus -#define MAP_I2CSlaveIntStatus \ - ROM_I2CSlaveIntStatus -#else -#define MAP_I2CSlaveIntStatus \ - I2CSlaveIntStatus -#endif -#ifdef ROM_I2CMasterIntClear -#define MAP_I2CMasterIntClear \ - ROM_I2CMasterIntClear -#else -#define MAP_I2CMasterIntClear \ - I2CMasterIntClear -#endif -#ifdef ROM_I2CSlaveIntClear -#define MAP_I2CSlaveIntClear \ - ROM_I2CSlaveIntClear -#else -#define MAP_I2CSlaveIntClear \ - I2CSlaveIntClear -#endif -#ifdef ROM_I2CMasterSlaveAddrSet -#define MAP_I2CMasterSlaveAddrSet \ - ROM_I2CMasterSlaveAddrSet -#else -#define MAP_I2CMasterSlaveAddrSet \ - I2CMasterSlaveAddrSet -#endif -#ifdef ROM_I2CMasterBusy -#define MAP_I2CMasterBusy \ - ROM_I2CMasterBusy -#else -#define MAP_I2CMasterBusy \ - I2CMasterBusy -#endif -#ifdef ROM_I2CMasterBusBusy -#define MAP_I2CMasterBusBusy \ - ROM_I2CMasterBusBusy -#else -#define MAP_I2CMasterBusBusy \ - I2CMasterBusBusy -#endif -#ifdef ROM_I2CMasterControl -#define MAP_I2CMasterControl \ - ROM_I2CMasterControl -#else -#define MAP_I2CMasterControl \ - I2CMasterControl -#endif -#ifdef ROM_I2CMasterErr -#define MAP_I2CMasterErr \ - ROM_I2CMasterErr -#else -#define MAP_I2CMasterErr \ - I2CMasterErr -#endif -#ifdef ROM_I2CMasterDataGet -#define MAP_I2CMasterDataGet \ - ROM_I2CMasterDataGet -#else -#define MAP_I2CMasterDataGet \ - I2CMasterDataGet -#endif -#ifdef ROM_I2CSlaveStatus -#define MAP_I2CSlaveStatus \ - ROM_I2CSlaveStatus -#else -#define MAP_I2CSlaveStatus \ - I2CSlaveStatus -#endif -#ifdef ROM_I2CSlaveDataPut -#define MAP_I2CSlaveDataPut \ - ROM_I2CSlaveDataPut -#else -#define MAP_I2CSlaveDataPut \ - I2CSlaveDataPut -#endif -#ifdef ROM_I2CSlaveDataGet -#define MAP_I2CSlaveDataGet \ - ROM_I2CSlaveDataGet -#else -#define MAP_I2CSlaveDataGet \ - I2CSlaveDataGet -#endif -#ifdef ROM_I2CSlaveIntEnableEx -#define MAP_I2CSlaveIntEnableEx \ - ROM_I2CSlaveIntEnableEx -#else -#define MAP_I2CSlaveIntEnableEx \ - I2CSlaveIntEnableEx -#endif -#ifdef ROM_I2CSlaveIntDisableEx -#define MAP_I2CSlaveIntDisableEx \ - ROM_I2CSlaveIntDisableEx -#else -#define MAP_I2CSlaveIntDisableEx \ - I2CSlaveIntDisableEx -#endif -#ifdef ROM_I2CSlaveIntStatusEx -#define MAP_I2CSlaveIntStatusEx \ - ROM_I2CSlaveIntStatusEx -#else -#define MAP_I2CSlaveIntStatusEx \ - I2CSlaveIntStatusEx -#endif -#ifdef ROM_I2CSlaveIntClearEx -#define MAP_I2CSlaveIntClearEx \ - ROM_I2CSlaveIntClearEx -#else -#define MAP_I2CSlaveIntClearEx \ - I2CSlaveIntClearEx -#endif -#ifdef ROM_I2CMasterIntEnableEx -#define MAP_I2CMasterIntEnableEx \ - ROM_I2CMasterIntEnableEx -#else -#define MAP_I2CMasterIntEnableEx \ - I2CMasterIntEnableEx -#endif -#ifdef ROM_I2CMasterIntDisableEx -#define MAP_I2CMasterIntDisableEx \ - ROM_I2CMasterIntDisableEx -#else -#define MAP_I2CMasterIntDisableEx \ - I2CMasterIntDisableEx -#endif -#ifdef ROM_I2CMasterIntStatusEx -#define MAP_I2CMasterIntStatusEx \ - ROM_I2CMasterIntStatusEx -#else -#define MAP_I2CMasterIntStatusEx \ - I2CMasterIntStatusEx -#endif -#ifdef ROM_I2CMasterIntClearEx -#define MAP_I2CMasterIntClearEx \ - ROM_I2CMasterIntClearEx -#else -#define MAP_I2CMasterIntClearEx \ - I2CMasterIntClearEx -#endif -#ifdef ROM_I2CMasterTimeoutSet -#define MAP_I2CMasterTimeoutSet \ - ROM_I2CMasterTimeoutSet -#else -#define MAP_I2CMasterTimeoutSet \ - I2CMasterTimeoutSet -#endif -#ifdef ROM_I2CSlaveACKOverride -#define MAP_I2CSlaveACKOverride \ - ROM_I2CSlaveACKOverride -#else -#define MAP_I2CSlaveACKOverride \ - I2CSlaveACKOverride -#endif -#ifdef ROM_I2CSlaveACKValueSet -#define MAP_I2CSlaveACKValueSet \ - ROM_I2CSlaveACKValueSet -#else -#define MAP_I2CSlaveACKValueSet \ - I2CSlaveACKValueSet -#endif -#ifdef ROM_I2CSlaveAddressSet -#define MAP_I2CSlaveAddressSet \ - ROM_I2CSlaveAddressSet -#else -#define MAP_I2CSlaveAddressSet \ - I2CSlaveAddressSet -#endif -#ifdef ROM_I2CMasterLineStateGet -#define MAP_I2CMasterLineStateGet \ - ROM_I2CMasterLineStateGet -#else -#define MAP_I2CMasterLineStateGet \ - I2CMasterLineStateGet -#endif - -//***************************************************************************** -// -// Macros for the I2S API. -// -//***************************************************************************** -#ifdef ROM_I2SIntStatus -#define MAP_I2SIntStatus \ - ROM_I2SIntStatus -#else -#define MAP_I2SIntStatus \ - I2SIntStatus -#endif -#ifdef ROM_I2STxEnable -#define MAP_I2STxEnable \ - ROM_I2STxEnable -#else -#define MAP_I2STxEnable \ - I2STxEnable -#endif -#ifdef ROM_I2STxDisable -#define MAP_I2STxDisable \ - ROM_I2STxDisable -#else -#define MAP_I2STxDisable \ - I2STxDisable -#endif -#ifdef ROM_I2STxDataPut -#define MAP_I2STxDataPut \ - ROM_I2STxDataPut -#else -#define MAP_I2STxDataPut \ - I2STxDataPut -#endif -#ifdef ROM_I2STxDataPutNonBlocking -#define MAP_I2STxDataPutNonBlocking \ - ROM_I2STxDataPutNonBlocking -#else -#define MAP_I2STxDataPutNonBlocking \ - I2STxDataPutNonBlocking -#endif -#ifdef ROM_I2STxConfigSet -#define MAP_I2STxConfigSet \ - ROM_I2STxConfigSet -#else -#define MAP_I2STxConfigSet \ - I2STxConfigSet -#endif -#ifdef ROM_I2STxFIFOLimitSet -#define MAP_I2STxFIFOLimitSet \ - ROM_I2STxFIFOLimitSet -#else -#define MAP_I2STxFIFOLimitSet \ - I2STxFIFOLimitSet -#endif -#ifdef ROM_I2STxFIFOLimitGet -#define MAP_I2STxFIFOLimitGet \ - ROM_I2STxFIFOLimitGet -#else -#define MAP_I2STxFIFOLimitGet \ - I2STxFIFOLimitGet -#endif -#ifdef ROM_I2STxFIFOLevelGet -#define MAP_I2STxFIFOLevelGet \ - ROM_I2STxFIFOLevelGet -#else -#define MAP_I2STxFIFOLevelGet \ - I2STxFIFOLevelGet -#endif -#ifdef ROM_I2SRxEnable -#define MAP_I2SRxEnable \ - ROM_I2SRxEnable -#else -#define MAP_I2SRxEnable \ - I2SRxEnable -#endif -#ifdef ROM_I2SRxDisable -#define MAP_I2SRxDisable \ - ROM_I2SRxDisable -#else -#define MAP_I2SRxDisable \ - I2SRxDisable -#endif -#ifdef ROM_I2SRxDataGet -#define MAP_I2SRxDataGet \ - ROM_I2SRxDataGet -#else -#define MAP_I2SRxDataGet \ - I2SRxDataGet -#endif -#ifdef ROM_I2SRxDataGetNonBlocking -#define MAP_I2SRxDataGetNonBlocking \ - ROM_I2SRxDataGetNonBlocking -#else -#define MAP_I2SRxDataGetNonBlocking \ - I2SRxDataGetNonBlocking -#endif -#ifdef ROM_I2SRxConfigSet -#define MAP_I2SRxConfigSet \ - ROM_I2SRxConfigSet -#else -#define MAP_I2SRxConfigSet \ - I2SRxConfigSet -#endif -#ifdef ROM_I2SRxFIFOLimitSet -#define MAP_I2SRxFIFOLimitSet \ - ROM_I2SRxFIFOLimitSet -#else -#define MAP_I2SRxFIFOLimitSet \ - I2SRxFIFOLimitSet -#endif -#ifdef ROM_I2SRxFIFOLimitGet -#define MAP_I2SRxFIFOLimitGet \ - ROM_I2SRxFIFOLimitGet -#else -#define MAP_I2SRxFIFOLimitGet \ - I2SRxFIFOLimitGet -#endif -#ifdef ROM_I2SRxFIFOLevelGet -#define MAP_I2SRxFIFOLevelGet \ - ROM_I2SRxFIFOLevelGet -#else -#define MAP_I2SRxFIFOLevelGet \ - I2SRxFIFOLevelGet -#endif -#ifdef ROM_I2STxRxEnable -#define MAP_I2STxRxEnable \ - ROM_I2STxRxEnable -#else -#define MAP_I2STxRxEnable \ - I2STxRxEnable -#endif -#ifdef ROM_I2STxRxDisable -#define MAP_I2STxRxDisable \ - ROM_I2STxRxDisable -#else -#define MAP_I2STxRxDisable \ - I2STxRxDisable -#endif -#ifdef ROM_I2STxRxConfigSet -#define MAP_I2STxRxConfigSet \ - ROM_I2STxRxConfigSet -#else -#define MAP_I2STxRxConfigSet \ - I2STxRxConfigSet -#endif -#ifdef ROM_I2SMasterClockSelect -#define MAP_I2SMasterClockSelect \ - ROM_I2SMasterClockSelect -#else -#define MAP_I2SMasterClockSelect \ - I2SMasterClockSelect -#endif -#ifdef ROM_I2SIntEnable -#define MAP_I2SIntEnable \ - ROM_I2SIntEnable -#else -#define MAP_I2SIntEnable \ - I2SIntEnable -#endif -#ifdef ROM_I2SIntDisable -#define MAP_I2SIntDisable \ - ROM_I2SIntDisable -#else -#define MAP_I2SIntDisable \ - I2SIntDisable -#endif -#ifdef ROM_I2SIntClear -#define MAP_I2SIntClear \ - ROM_I2SIntClear -#else -#define MAP_I2SIntClear \ - I2SIntClear -#endif - -//***************************************************************************** -// -// Macros for the Interrupt API. -// -//***************************************************************************** -#ifdef ROM_IntEnable -#define MAP_IntEnable \ - ROM_IntEnable -#else -#define MAP_IntEnable \ - IntEnable -#endif -#ifdef ROM_IntMasterEnable -#define MAP_IntMasterEnable \ - ROM_IntMasterEnable -#else -#define MAP_IntMasterEnable \ - IntMasterEnable -#endif -#ifdef ROM_IntMasterDisable -#define MAP_IntMasterDisable \ - ROM_IntMasterDisable -#else -#define MAP_IntMasterDisable \ - IntMasterDisable -#endif -#ifdef ROM_IntDisable -#define MAP_IntDisable \ - ROM_IntDisable -#else -#define MAP_IntDisable \ - IntDisable -#endif -#ifdef ROM_IntPriorityGroupingSet -#define MAP_IntPriorityGroupingSet \ - ROM_IntPriorityGroupingSet -#else -#define MAP_IntPriorityGroupingSet \ - IntPriorityGroupingSet -#endif -#ifdef ROM_IntPriorityGroupingGet -#define MAP_IntPriorityGroupingGet \ - ROM_IntPriorityGroupingGet -#else -#define MAP_IntPriorityGroupingGet \ - IntPriorityGroupingGet -#endif -#ifdef ROM_IntPrioritySet -#define MAP_IntPrioritySet \ - ROM_IntPrioritySet -#else -#define MAP_IntPrioritySet \ - IntPrioritySet -#endif -#ifdef ROM_IntPriorityGet -#define MAP_IntPriorityGet \ - ROM_IntPriorityGet -#else -#define MAP_IntPriorityGet \ - IntPriorityGet -#endif -#ifdef ROM_IntPendSet -#define MAP_IntPendSet \ - ROM_IntPendSet -#else -#define MAP_IntPendSet \ - IntPendSet -#endif -#ifdef ROM_IntPendClear -#define MAP_IntPendClear \ - ROM_IntPendClear -#else -#define MAP_IntPendClear \ - IntPendClear -#endif -#ifdef ROM_IntPriorityMaskSet -#define MAP_IntPriorityMaskSet \ - ROM_IntPriorityMaskSet -#else -#define MAP_IntPriorityMaskSet \ - IntPriorityMaskSet -#endif -#ifdef ROM_IntPriorityMaskGet -#define MAP_IntPriorityMaskGet \ - ROM_IntPriorityMaskGet -#else -#define MAP_IntPriorityMaskGet \ - IntPriorityMaskGet -#endif - -//***************************************************************************** -// -// Macros for the LPC API. -// -//***************************************************************************** -#ifdef ROM_LPCIntClear -#define MAP_LPCIntClear \ - ROM_LPCIntClear -#else -#define MAP_LPCIntClear \ - LPCIntClear -#endif -#ifdef ROM_LPCByteRead -#define MAP_LPCByteRead \ - ROM_LPCByteRead -#else -#define MAP_LPCByteRead \ - LPCByteRead -#endif -#ifdef ROM_LPCByteWrite -#define MAP_LPCByteWrite \ - ROM_LPCByteWrite -#else -#define MAP_LPCByteWrite \ - LPCByteWrite -#endif -#ifdef ROM_LPCChannelConfigCOMxSet -#define MAP_LPCChannelConfigCOMxSet \ - ROM_LPCChannelConfigCOMxSet -#else -#define MAP_LPCChannelConfigCOMxSet \ - LPCChannelConfigCOMxSet -#endif -#ifdef ROM_LPCChannelConfigGet -#define MAP_LPCChannelConfigGet \ - ROM_LPCChannelConfigGet -#else -#define MAP_LPCChannelConfigGet \ - LPCChannelConfigGet -#endif -#ifdef ROM_LPCChannelConfigEPSet -#define MAP_LPCChannelConfigEPSet \ - ROM_LPCChannelConfigEPSet -#else -#define MAP_LPCChannelConfigEPSet \ - LPCChannelConfigEPSet -#endif -#ifdef ROM_LPCChannelConfigMBSet -#define MAP_LPCChannelConfigMBSet \ - ROM_LPCChannelConfigMBSet -#else -#define MAP_LPCChannelConfigMBSet \ - LPCChannelConfigMBSet -#endif -#ifdef ROM_LPCChannelDMAConfigGet -#define MAP_LPCChannelDMAConfigGet \ - ROM_LPCChannelDMAConfigGet -#else -#define MAP_LPCChannelDMAConfigGet \ - LPCChannelDMAConfigGet -#endif -#ifdef ROM_LPCChannelDMAConfigSet -#define MAP_LPCChannelDMAConfigSet \ - ROM_LPCChannelDMAConfigSet -#else -#define MAP_LPCChannelDMAConfigSet \ - LPCChannelDMAConfigSet -#endif -#ifdef ROM_LPCChannelDisable -#define MAP_LPCChannelDisable \ - ROM_LPCChannelDisable -#else -#define MAP_LPCChannelDisable \ - LPCChannelDisable -#endif -#ifdef ROM_LPCChannelEnable -#define MAP_LPCChannelEnable \ - ROM_LPCChannelEnable -#else -#define MAP_LPCChannelEnable \ - LPCChannelEnable -#endif -#ifdef ROM_LPCChannelStatusClear -#define MAP_LPCChannelStatusClear \ - ROM_LPCChannelStatusClear -#else -#define MAP_LPCChannelStatusClear \ - LPCChannelStatusClear -#endif -#ifdef ROM_LPCChannelStatusGet -#define MAP_LPCChannelStatusGet \ - ROM_LPCChannelStatusGet -#else -#define MAP_LPCChannelStatusGet \ - LPCChannelStatusGet -#endif -#ifdef ROM_LPCChannelStatusSet -#define MAP_LPCChannelStatusSet \ - ROM_LPCChannelStatusSet -#else -#define MAP_LPCChannelStatusSet \ - LPCChannelStatusSet -#endif -#ifdef ROM_LPCCOMxIntClear -#define MAP_LPCCOMxIntClear \ - ROM_LPCCOMxIntClear -#else -#define MAP_LPCCOMxIntClear \ - LPCCOMxIntClear -#endif -#ifdef ROM_LPCCOMxIntDisable -#define MAP_LPCCOMxIntDisable \ - ROM_LPCCOMxIntDisable -#else -#define MAP_LPCCOMxIntDisable \ - LPCCOMxIntDisable -#endif -#ifdef ROM_LPCCOMxIntEnable -#define MAP_LPCCOMxIntEnable \ - ROM_LPCCOMxIntEnable -#else -#define MAP_LPCCOMxIntEnable \ - LPCCOMxIntEnable -#endif -#ifdef ROM_LPCCOMxIntStatus -#define MAP_LPCCOMxIntStatus \ - ROM_LPCCOMxIntStatus -#else -#define MAP_LPCCOMxIntStatus \ - LPCCOMxIntStatus -#endif -#ifdef ROM_LPCConfigGet -#define MAP_LPCConfigGet \ - ROM_LPCConfigGet -#else -#define MAP_LPCConfigGet \ - LPCConfigGet -#endif -#ifdef ROM_LPCConfigSet -#define MAP_LPCConfigSet \ - ROM_LPCConfigSet -#else -#define MAP_LPCConfigSet \ - LPCConfigSet -#endif -#ifdef ROM_LPCHalfWordRead -#define MAP_LPCHalfWordRead \ - ROM_LPCHalfWordRead -#else -#define MAP_LPCHalfWordRead \ - LPCHalfWordRead -#endif -#ifdef ROM_LPCHalfWordWrite -#define MAP_LPCHalfWordWrite \ - ROM_LPCHalfWordWrite -#else -#define MAP_LPCHalfWordWrite \ - LPCHalfWordWrite -#endif -#ifdef ROM_LPCIRQClear -#define MAP_LPCIRQClear \ - ROM_LPCIRQClear -#else -#define MAP_LPCIRQClear \ - LPCIRQClear -#endif -#ifdef ROM_LPCIRQConfig -#define MAP_LPCIRQConfig \ - ROM_LPCIRQConfig -#else -#define MAP_LPCIRQConfig \ - LPCIRQConfig -#endif -#ifdef ROM_LPCIRQGet -#define MAP_LPCIRQGet \ - ROM_LPCIRQGet -#else -#define MAP_LPCIRQGet \ - LPCIRQGet -#endif -#ifdef ROM_LPCIRQSend -#define MAP_LPCIRQSend \ - ROM_LPCIRQSend -#else -#define MAP_LPCIRQSend \ - LPCIRQSend -#endif -#ifdef ROM_LPCIRQSet -#define MAP_LPCIRQSet \ - ROM_LPCIRQSet -#else -#define MAP_LPCIRQSet \ - LPCIRQSet -#endif -#ifdef ROM_LPCIntDisable -#define MAP_LPCIntDisable \ - ROM_LPCIntDisable -#else -#define MAP_LPCIntDisable \ - LPCIntDisable -#endif -#ifdef ROM_LPCIntEnable -#define MAP_LPCIntEnable \ - ROM_LPCIntEnable -#else -#define MAP_LPCIntEnable \ - LPCIntEnable -#endif -#ifdef ROM_LPCIntStatus -#define MAP_LPCIntStatus \ - ROM_LPCIntStatus -#else -#define MAP_LPCIntStatus \ - LPCIntStatus -#endif -#ifdef ROM_LPCSCIAssert -#define MAP_LPCSCIAssert \ - ROM_LPCSCIAssert -#else -#define MAP_LPCSCIAssert \ - LPCSCIAssert -#endif -#ifdef ROM_LPCStatusGet -#define MAP_LPCStatusGet \ - ROM_LPCStatusGet -#else -#define MAP_LPCStatusGet \ - LPCStatusGet -#endif -#ifdef ROM_LPCWordRead -#define MAP_LPCWordRead \ - ROM_LPCWordRead -#else -#define MAP_LPCWordRead \ - LPCWordRead -#endif -#ifdef ROM_LPCWordWrite -#define MAP_LPCWordWrite \ - ROM_LPCWordWrite -#else -#define MAP_LPCWordWrite \ - LPCWordWrite -#endif -#ifdef ROM_LPCChannelPoolAddressGet -#define MAP_LPCChannelPoolAddressGet \ - ROM_LPCChannelPoolAddressGet -#else -#define MAP_LPCChannelPoolAddressGet \ - LPCChannelPoolAddressGet -#endif -#ifdef ROM_LPCStatusBlockAddressGet -#define MAP_LPCStatusBlockAddressGet \ - ROM_LPCStatusBlockAddressGet -#else -#define MAP_LPCStatusBlockAddressGet \ - LPCStatusBlockAddressGet -#endif -#ifdef ROM_LPCStatusBlockAddressSet -#define MAP_LPCStatusBlockAddressSet \ - ROM_LPCStatusBlockAddressSet -#else -#define MAP_LPCStatusBlockAddressSet \ - LPCStatusBlockAddressSet -#endif - -//***************************************************************************** -// -// Macros for the MPU API. -// -//***************************************************************************** -#ifdef ROM_MPUEnable -#define MAP_MPUEnable \ - ROM_MPUEnable -#else -#define MAP_MPUEnable \ - MPUEnable -#endif -#ifdef ROM_MPUDisable -#define MAP_MPUDisable \ - ROM_MPUDisable -#else -#define MAP_MPUDisable \ - MPUDisable -#endif -#ifdef ROM_MPURegionCountGet -#define MAP_MPURegionCountGet \ - ROM_MPURegionCountGet -#else -#define MAP_MPURegionCountGet \ - MPURegionCountGet -#endif -#ifdef ROM_MPURegionEnable -#define MAP_MPURegionEnable \ - ROM_MPURegionEnable -#else -#define MAP_MPURegionEnable \ - MPURegionEnable -#endif -#ifdef ROM_MPURegionDisable -#define MAP_MPURegionDisable \ - ROM_MPURegionDisable -#else -#define MAP_MPURegionDisable \ - MPURegionDisable -#endif -#ifdef ROM_MPURegionSet -#define MAP_MPURegionSet \ - ROM_MPURegionSet -#else -#define MAP_MPURegionSet \ - MPURegionSet -#endif -#ifdef ROM_MPURegionGet -#define MAP_MPURegionGet \ - ROM_MPURegionGet -#else -#define MAP_MPURegionGet \ - MPURegionGet -#endif - -//***************************************************************************** -// -// Macros for the PECI API. -// -//***************************************************************************** -#ifdef ROM_PECIIntClear -#define MAP_PECIIntClear \ - ROM_PECIIntClear -#else -#define MAP_PECIIntClear \ - PECIIntClear -#endif -#ifdef ROM_PECIAdvCmdSend -#define MAP_PECIAdvCmdSend \ - ROM_PECIAdvCmdSend -#else -#define MAP_PECIAdvCmdSend \ - PECIAdvCmdSend -#endif -#ifdef ROM_PECIAdvCmdSendNonBlocking -#define MAP_PECIAdvCmdSendNonBlocking \ - ROM_PECIAdvCmdSendNonBlocking -#else -#define MAP_PECIAdvCmdSendNonBlocking \ - PECIAdvCmdSendNonBlocking -#endif -#ifdef ROM_PECIAdvCmdStatusGet -#define MAP_PECIAdvCmdStatusGet \ - ROM_PECIAdvCmdStatusGet -#else -#define MAP_PECIAdvCmdStatusGet \ - PECIAdvCmdStatusGet -#endif -#ifdef ROM_PECIConfigGet -#define MAP_PECIConfigGet \ - ROM_PECIConfigGet -#else -#define MAP_PECIConfigGet \ - PECIConfigGet -#endif -#ifdef ROM_PECIConfigSet -#define MAP_PECIConfigSet \ - ROM_PECIConfigSet -#else -#define MAP_PECIConfigSet \ - PECIConfigSet -#endif -#ifdef ROM_PECIDomainMaxReadClear -#define MAP_PECIDomainMaxReadClear \ - ROM_PECIDomainMaxReadClear -#else -#define MAP_PECIDomainMaxReadClear \ - PECIDomainMaxReadClear -#endif -#ifdef ROM_PECIDomainValueClear -#define MAP_PECIDomainValueClear \ - ROM_PECIDomainValueClear -#else -#define MAP_PECIDomainValueClear \ - PECIDomainValueClear -#endif -#ifdef ROM_PECIDomainConfigGet -#define MAP_PECIDomainConfigGet \ - ROM_PECIDomainConfigGet -#else -#define MAP_PECIDomainConfigGet \ - PECIDomainConfigGet -#endif -#ifdef ROM_PECIDomainConfigSet -#define MAP_PECIDomainConfigSet \ - ROM_PECIDomainConfigSet -#else -#define MAP_PECIDomainConfigSet \ - PECIDomainConfigSet -#endif -#ifdef ROM_PECIDomainDisable -#define MAP_PECIDomainDisable \ - ROM_PECIDomainDisable -#else -#define MAP_PECIDomainDisable \ - PECIDomainDisable -#endif -#ifdef ROM_PECIDomainEnable -#define MAP_PECIDomainEnable \ - ROM_PECIDomainEnable -#else -#define MAP_PECIDomainEnable \ - PECIDomainEnable -#endif -#ifdef ROM_PECIDomainMaxReadGet -#define MAP_PECIDomainMaxReadGet \ - ROM_PECIDomainMaxReadGet -#else -#define MAP_PECIDomainMaxReadGet \ - PECIDomainMaxReadGet -#endif -#ifdef ROM_PECIDomainValueGet -#define MAP_PECIDomainValueGet \ - ROM_PECIDomainValueGet -#else -#define MAP_PECIDomainValueGet \ - PECIDomainValueGet -#endif -#ifdef ROM_PECIIntDisable -#define MAP_PECIIntDisable \ - ROM_PECIIntDisable -#else -#define MAP_PECIIntDisable \ - PECIIntDisable -#endif -#ifdef ROM_PECIIntEnable -#define MAP_PECIIntEnable \ - ROM_PECIIntEnable -#else -#define MAP_PECIIntEnable \ - PECIIntEnable -#endif -#ifdef ROM_PECIIntStatus -#define MAP_PECIIntStatus \ - ROM_PECIIntStatus -#else -#define MAP_PECIIntStatus \ - PECIIntStatus -#endif -#ifdef ROM_PECIBypassEnable -#define MAP_PECIBypassEnable \ - ROM_PECIBypassEnable -#else -#define MAP_PECIBypassEnable \ - PECIBypassEnable -#endif -#ifdef ROM_PECIBypassDisable -#define MAP_PECIBypassDisable \ - ROM_PECIBypassDisable -#else -#define MAP_PECIBypassDisable \ - PECIBypassDisable -#endif - -//***************************************************************************** -// -// Macros for the PWM API. -// -//***************************************************************************** -#ifdef ROM_PWMPulseWidthSet -#define MAP_PWMPulseWidthSet \ - ROM_PWMPulseWidthSet -#else -#define MAP_PWMPulseWidthSet \ - PWMPulseWidthSet -#endif -#ifdef ROM_PWMGenConfigure -#define MAP_PWMGenConfigure \ - ROM_PWMGenConfigure -#else -#define MAP_PWMGenConfigure \ - PWMGenConfigure -#endif -#ifdef ROM_PWMGenPeriodSet -#define MAP_PWMGenPeriodSet \ - ROM_PWMGenPeriodSet -#else -#define MAP_PWMGenPeriodSet \ - PWMGenPeriodSet -#endif -#ifdef ROM_PWMGenPeriodGet -#define MAP_PWMGenPeriodGet \ - ROM_PWMGenPeriodGet -#else -#define MAP_PWMGenPeriodGet \ - PWMGenPeriodGet -#endif -#ifdef ROM_PWMGenEnable -#define MAP_PWMGenEnable \ - ROM_PWMGenEnable -#else -#define MAP_PWMGenEnable \ - PWMGenEnable -#endif -#ifdef ROM_PWMGenDisable -#define MAP_PWMGenDisable \ - ROM_PWMGenDisable -#else -#define MAP_PWMGenDisable \ - PWMGenDisable -#endif -#ifdef ROM_PWMPulseWidthGet -#define MAP_PWMPulseWidthGet \ - ROM_PWMPulseWidthGet -#else -#define MAP_PWMPulseWidthGet \ - PWMPulseWidthGet -#endif -#ifdef ROM_PWMDeadBandEnable -#define MAP_PWMDeadBandEnable \ - ROM_PWMDeadBandEnable -#else -#define MAP_PWMDeadBandEnable \ - PWMDeadBandEnable -#endif -#ifdef ROM_PWMDeadBandDisable -#define MAP_PWMDeadBandDisable \ - ROM_PWMDeadBandDisable -#else -#define MAP_PWMDeadBandDisable \ - PWMDeadBandDisable -#endif -#ifdef ROM_PWMSyncUpdate -#define MAP_PWMSyncUpdate \ - ROM_PWMSyncUpdate -#else -#define MAP_PWMSyncUpdate \ - PWMSyncUpdate -#endif -#ifdef ROM_PWMSyncTimeBase -#define MAP_PWMSyncTimeBase \ - ROM_PWMSyncTimeBase -#else -#define MAP_PWMSyncTimeBase \ - PWMSyncTimeBase -#endif -#ifdef ROM_PWMOutputState -#define MAP_PWMOutputState \ - ROM_PWMOutputState -#else -#define MAP_PWMOutputState \ - PWMOutputState -#endif -#ifdef ROM_PWMOutputInvert -#define MAP_PWMOutputInvert \ - ROM_PWMOutputInvert -#else -#define MAP_PWMOutputInvert \ - PWMOutputInvert -#endif -#ifdef ROM_PWMOutputFault -#define MAP_PWMOutputFault \ - ROM_PWMOutputFault -#else -#define MAP_PWMOutputFault \ - PWMOutputFault -#endif -#ifdef ROM_PWMGenIntTrigEnable -#define MAP_PWMGenIntTrigEnable \ - ROM_PWMGenIntTrigEnable -#else -#define MAP_PWMGenIntTrigEnable \ - PWMGenIntTrigEnable -#endif -#ifdef ROM_PWMGenIntTrigDisable -#define MAP_PWMGenIntTrigDisable \ - ROM_PWMGenIntTrigDisable -#else -#define MAP_PWMGenIntTrigDisable \ - PWMGenIntTrigDisable -#endif -#ifdef ROM_PWMGenIntStatus -#define MAP_PWMGenIntStatus \ - ROM_PWMGenIntStatus -#else -#define MAP_PWMGenIntStatus \ - PWMGenIntStatus -#endif -#ifdef ROM_PWMGenIntClear -#define MAP_PWMGenIntClear \ - ROM_PWMGenIntClear -#else -#define MAP_PWMGenIntClear \ - PWMGenIntClear -#endif -#ifdef ROM_PWMIntEnable -#define MAP_PWMIntEnable \ - ROM_PWMIntEnable -#else -#define MAP_PWMIntEnable \ - PWMIntEnable -#endif -#ifdef ROM_PWMIntDisable -#define MAP_PWMIntDisable \ - ROM_PWMIntDisable -#else -#define MAP_PWMIntDisable \ - PWMIntDisable -#endif -#ifdef ROM_PWMFaultIntClear -#define MAP_PWMFaultIntClear \ - ROM_PWMFaultIntClear -#else -#define MAP_PWMFaultIntClear \ - PWMFaultIntClear -#endif -#ifdef ROM_PWMIntStatus -#define MAP_PWMIntStatus \ - ROM_PWMIntStatus -#else -#define MAP_PWMIntStatus \ - PWMIntStatus -#endif -#ifdef ROM_PWMOutputFaultLevel -#define MAP_PWMOutputFaultLevel \ - ROM_PWMOutputFaultLevel -#else -#define MAP_PWMOutputFaultLevel \ - PWMOutputFaultLevel -#endif -#ifdef ROM_PWMFaultIntClearExt -#define MAP_PWMFaultIntClearExt \ - ROM_PWMFaultIntClearExt -#else -#define MAP_PWMFaultIntClearExt \ - PWMFaultIntClearExt -#endif -#ifdef ROM_PWMGenFaultConfigure -#define MAP_PWMGenFaultConfigure \ - ROM_PWMGenFaultConfigure -#else -#define MAP_PWMGenFaultConfigure \ - PWMGenFaultConfigure -#endif -#ifdef ROM_PWMGenFaultTriggerSet -#define MAP_PWMGenFaultTriggerSet \ - ROM_PWMGenFaultTriggerSet -#else -#define MAP_PWMGenFaultTriggerSet \ - PWMGenFaultTriggerSet -#endif -#ifdef ROM_PWMGenFaultTriggerGet -#define MAP_PWMGenFaultTriggerGet \ - ROM_PWMGenFaultTriggerGet -#else -#define MAP_PWMGenFaultTriggerGet \ - PWMGenFaultTriggerGet -#endif -#ifdef ROM_PWMGenFaultStatus -#define MAP_PWMGenFaultStatus \ - ROM_PWMGenFaultStatus -#else -#define MAP_PWMGenFaultStatus \ - PWMGenFaultStatus -#endif -#ifdef ROM_PWMGenFaultClear -#define MAP_PWMGenFaultClear \ - ROM_PWMGenFaultClear -#else -#define MAP_PWMGenFaultClear \ - PWMGenFaultClear -#endif - -//***************************************************************************** -// -// Macros for the QEI API. -// -//***************************************************************************** -#ifdef ROM_QEIPositionGet -#define MAP_QEIPositionGet \ - ROM_QEIPositionGet -#else -#define MAP_QEIPositionGet \ - QEIPositionGet -#endif -#ifdef ROM_QEIEnable -#define MAP_QEIEnable \ - ROM_QEIEnable -#else -#define MAP_QEIEnable \ - QEIEnable -#endif -#ifdef ROM_QEIDisable -#define MAP_QEIDisable \ - ROM_QEIDisable -#else -#define MAP_QEIDisable \ - QEIDisable -#endif -#ifdef ROM_QEIConfigure -#define MAP_QEIConfigure \ - ROM_QEIConfigure -#else -#define MAP_QEIConfigure \ - QEIConfigure -#endif -#ifdef ROM_QEIPositionSet -#define MAP_QEIPositionSet \ - ROM_QEIPositionSet -#else -#define MAP_QEIPositionSet \ - QEIPositionSet -#endif -#ifdef ROM_QEIDirectionGet -#define MAP_QEIDirectionGet \ - ROM_QEIDirectionGet -#else -#define MAP_QEIDirectionGet \ - QEIDirectionGet -#endif -#ifdef ROM_QEIErrorGet -#define MAP_QEIErrorGet \ - ROM_QEIErrorGet -#else -#define MAP_QEIErrorGet \ - QEIErrorGet -#endif -#ifdef ROM_QEIVelocityEnable -#define MAP_QEIVelocityEnable \ - ROM_QEIVelocityEnable -#else -#define MAP_QEIVelocityEnable \ - QEIVelocityEnable -#endif -#ifdef ROM_QEIVelocityDisable -#define MAP_QEIVelocityDisable \ - ROM_QEIVelocityDisable -#else -#define MAP_QEIVelocityDisable \ - QEIVelocityDisable -#endif -#ifdef ROM_QEIVelocityConfigure -#define MAP_QEIVelocityConfigure \ - ROM_QEIVelocityConfigure -#else -#define MAP_QEIVelocityConfigure \ - QEIVelocityConfigure -#endif -#ifdef ROM_QEIVelocityGet -#define MAP_QEIVelocityGet \ - ROM_QEIVelocityGet -#else -#define MAP_QEIVelocityGet \ - QEIVelocityGet -#endif -#ifdef ROM_QEIIntEnable -#define MAP_QEIIntEnable \ - ROM_QEIIntEnable -#else -#define MAP_QEIIntEnable \ - QEIIntEnable -#endif -#ifdef ROM_QEIIntDisable -#define MAP_QEIIntDisable \ - ROM_QEIIntDisable -#else -#define MAP_QEIIntDisable \ - QEIIntDisable -#endif -#ifdef ROM_QEIIntStatus -#define MAP_QEIIntStatus \ - ROM_QEIIntStatus -#else -#define MAP_QEIIntStatus \ - QEIIntStatus -#endif -#ifdef ROM_QEIIntClear -#define MAP_QEIIntClear \ - ROM_QEIIntClear -#else -#define MAP_QEIIntClear \ - QEIIntClear -#endif - -//***************************************************************************** -// -// Macros for the SMBus API. -// -//***************************************************************************** -#ifdef ROM_SMBusMasterIntProcess -#define MAP_SMBusMasterIntProcess \ - ROM_SMBusMasterIntProcess -#else -#define MAP_SMBusMasterIntProcess \ - SMBusMasterIntProcess -#endif -#ifdef ROM_SMBusARPDisable -#define MAP_SMBusARPDisable \ - ROM_SMBusARPDisable -#else -#define MAP_SMBusARPDisable \ - SMBusARPDisable -#endif -#ifdef ROM_SMBusARPEnable -#define MAP_SMBusARPEnable \ - ROM_SMBusARPEnable -#else -#define MAP_SMBusARPEnable \ - SMBusARPEnable -#endif -#ifdef ROM_SMBusARPUDIDPacketDecode -#define MAP_SMBusARPUDIDPacketDecode \ - ROM_SMBusARPUDIDPacketDecode -#else -#define MAP_SMBusARPUDIDPacketDecode \ - SMBusARPUDIDPacketDecode -#endif -#ifdef ROM_SMBusARPUDIDPacketEncode -#define MAP_SMBusARPUDIDPacketEncode \ - ROM_SMBusARPUDIDPacketEncode -#else -#define MAP_SMBusARPUDIDPacketEncode \ - SMBusARPUDIDPacketEncode -#endif -#ifdef ROM_SMBusMasterARPAssignAddress -#define MAP_SMBusMasterARPAssignAddress \ - ROM_SMBusMasterARPAssignAddress -#else -#define MAP_SMBusMasterARPAssignAddress \ - SMBusMasterARPAssignAddress -#endif -#ifdef ROM_SMBusMasterARPGetUDIDDir -#define MAP_SMBusMasterARPGetUDIDDir \ - ROM_SMBusMasterARPGetUDIDDir -#else -#define MAP_SMBusMasterARPGetUDIDDir \ - SMBusMasterARPGetUDIDDir -#endif -#ifdef ROM_SMBusMasterARPGetUDIDGen -#define MAP_SMBusMasterARPGetUDIDGen \ - ROM_SMBusMasterARPGetUDIDGen -#else -#define MAP_SMBusMasterARPGetUDIDGen \ - SMBusMasterARPGetUDIDGen -#endif -#ifdef ROM_SMBusMasterARPNotifyMaster -#define MAP_SMBusMasterARPNotifyMaster \ - ROM_SMBusMasterARPNotifyMaster -#else -#define MAP_SMBusMasterARPNotifyMaster \ - SMBusMasterARPNotifyMaster -#endif -#ifdef ROM_SMBusMasterARPPrepareToARP -#define MAP_SMBusMasterARPPrepareToARP \ - ROM_SMBusMasterARPPrepareToARP -#else -#define MAP_SMBusMasterARPPrepareToARP \ - SMBusMasterARPPrepareToARP -#endif -#ifdef ROM_SMBusMasterARPResetDeviceDir -#define MAP_SMBusMasterARPResetDeviceDir \ - ROM_SMBusMasterARPResetDeviceDir -#else -#define MAP_SMBusMasterARPResetDeviceDir \ - SMBusMasterARPResetDeviceDir -#endif -#ifdef ROM_SMBusMasterARPResetDeviceGen -#define MAP_SMBusMasterARPResetDeviceGen \ - ROM_SMBusMasterARPResetDeviceGen -#else -#define MAP_SMBusMasterARPResetDeviceGen \ - SMBusMasterARPResetDeviceGen -#endif -#ifdef ROM_SMBusMasterBlockProcessCall -#define MAP_SMBusMasterBlockProcessCall \ - ROM_SMBusMasterBlockProcessCall -#else -#define MAP_SMBusMasterBlockProcessCall \ - SMBusMasterBlockProcessCall -#endif -#ifdef ROM_SMBusMasterBlockRead -#define MAP_SMBusMasterBlockRead \ - ROM_SMBusMasterBlockRead -#else -#define MAP_SMBusMasterBlockRead \ - SMBusMasterBlockRead -#endif -#ifdef ROM_SMBusMasterBlockWrite -#define MAP_SMBusMasterBlockWrite \ - ROM_SMBusMasterBlockWrite -#else -#define MAP_SMBusMasterBlockWrite \ - SMBusMasterBlockWrite -#endif -#ifdef ROM_SMBusMasterByteReceive -#define MAP_SMBusMasterByteReceive \ - ROM_SMBusMasterByteReceive -#else -#define MAP_SMBusMasterByteReceive \ - SMBusMasterByteReceive -#endif -#ifdef ROM_SMBusMasterByteSend -#define MAP_SMBusMasterByteSend \ - ROM_SMBusMasterByteSend -#else -#define MAP_SMBusMasterByteSend \ - SMBusMasterByteSend -#endif -#ifdef ROM_SMBusMasterByteWordRead -#define MAP_SMBusMasterByteWordRead \ - ROM_SMBusMasterByteWordRead -#else -#define MAP_SMBusMasterByteWordRead \ - SMBusMasterByteWordRead -#endif -#ifdef ROM_SMBusMasterByteWordWrite -#define MAP_SMBusMasterByteWordWrite \ - ROM_SMBusMasterByteWordWrite -#else -#define MAP_SMBusMasterByteWordWrite \ - SMBusMasterByteWordWrite -#endif -#ifdef ROM_SMBusMasterHostNotify -#define MAP_SMBusMasterHostNotify \ - ROM_SMBusMasterHostNotify -#else -#define MAP_SMBusMasterHostNotify \ - SMBusMasterHostNotify -#endif -#ifdef ROM_SMBusMasterI2CRead -#define MAP_SMBusMasterI2CRead \ - ROM_SMBusMasterI2CRead -#else -#define MAP_SMBusMasterI2CRead \ - SMBusMasterI2CRead -#endif -#ifdef ROM_SMBusMasterI2CWrite -#define MAP_SMBusMasterI2CWrite \ - ROM_SMBusMasterI2CWrite -#else -#define MAP_SMBusMasterI2CWrite \ - SMBusMasterI2CWrite -#endif -#ifdef ROM_SMBusMasterI2CWriteRead -#define MAP_SMBusMasterI2CWriteRead \ - ROM_SMBusMasterI2CWriteRead -#else -#define MAP_SMBusMasterI2CWriteRead \ - SMBusMasterI2CWriteRead -#endif -#ifdef ROM_SMBusMasterInit -#define MAP_SMBusMasterInit \ - ROM_SMBusMasterInit -#else -#define MAP_SMBusMasterInit \ - SMBusMasterInit -#endif -#ifdef ROM_SMBusMasterIntEnable -#define MAP_SMBusMasterIntEnable \ - ROM_SMBusMasterIntEnable -#else -#define MAP_SMBusMasterIntEnable \ - SMBusMasterIntEnable -#endif -#ifdef ROM_SMBusMasterProcessCall -#define MAP_SMBusMasterProcessCall \ - ROM_SMBusMasterProcessCall -#else -#define MAP_SMBusMasterProcessCall \ - SMBusMasterProcessCall -#endif -#ifdef ROM_SMBusMasterQuickCommand -#define MAP_SMBusMasterQuickCommand \ - ROM_SMBusMasterQuickCommand -#else -#define MAP_SMBusMasterQuickCommand \ - SMBusMasterQuickCommand -#endif -#ifdef ROM_SMBusPECDisable -#define MAP_SMBusPECDisable \ - ROM_SMBusPECDisable -#else -#define MAP_SMBusPECDisable \ - SMBusPECDisable -#endif -#ifdef ROM_SMBusPECEnable -#define MAP_SMBusPECEnable \ - ROM_SMBusPECEnable -#else -#define MAP_SMBusPECEnable \ - SMBusPECEnable -#endif -#ifdef ROM_SMBusRxPacketSizeGet -#define MAP_SMBusRxPacketSizeGet \ - ROM_SMBusRxPacketSizeGet -#else -#define MAP_SMBusRxPacketSizeGet \ - SMBusRxPacketSizeGet -#endif -#ifdef ROM_SMBusSlaveACKSend -#define MAP_SMBusSlaveACKSend \ - ROM_SMBusSlaveACKSend -#else -#define MAP_SMBusSlaveACKSend \ - SMBusSlaveACKSend -#endif -#ifdef ROM_SMBusSlaveAddressSet -#define MAP_SMBusSlaveAddressSet \ - ROM_SMBusSlaveAddressSet -#else -#define MAP_SMBusSlaveAddressSet \ - SMBusSlaveAddressSet -#endif -#ifdef ROM_SMBusSlaveARPFlagARGet -#define MAP_SMBusSlaveARPFlagARGet \ - ROM_SMBusSlaveARPFlagARGet -#else -#define MAP_SMBusSlaveARPFlagARGet \ - SMBusSlaveARPFlagARGet -#endif -#ifdef ROM_SMBusSlaveARPFlagARSet -#define MAP_SMBusSlaveARPFlagARSet \ - ROM_SMBusSlaveARPFlagARSet -#else -#define MAP_SMBusSlaveARPFlagARSet \ - SMBusSlaveARPFlagARSet -#endif -#ifdef ROM_SMBusSlaveARPFlagAVGet -#define MAP_SMBusSlaveARPFlagAVGet \ - ROM_SMBusSlaveARPFlagAVGet -#else -#define MAP_SMBusSlaveARPFlagAVGet \ - SMBusSlaveARPFlagAVGet -#endif -#ifdef ROM_SMBusSlaveARPFlagAVSet -#define MAP_SMBusSlaveARPFlagAVSet \ - ROM_SMBusSlaveARPFlagAVSet -#else -#define MAP_SMBusSlaveARPFlagAVSet \ - SMBusSlaveARPFlagAVSet -#endif -#ifdef ROM_SMBusSlaveBlockTransferDisable -#define MAP_SMBusSlaveBlockTransferDisable \ - ROM_SMBusSlaveBlockTransferDisable -#else -#define MAP_SMBusSlaveBlockTransferDisable \ - SMBusSlaveBlockTransferDisable -#endif -#ifdef ROM_SMBusSlaveBlockTransferEnable -#define MAP_SMBusSlaveBlockTransferEnable \ - ROM_SMBusSlaveBlockTransferEnable -#else -#define MAP_SMBusSlaveBlockTransferEnable \ - SMBusSlaveBlockTransferEnable -#endif -#ifdef ROM_SMBusSlaveCommandGet -#define MAP_SMBusSlaveCommandGet \ - ROM_SMBusSlaveCommandGet -#else -#define MAP_SMBusSlaveCommandGet \ - SMBusSlaveCommandGet -#endif -#ifdef ROM_SMBusSlaveI2CDisable -#define MAP_SMBusSlaveI2CDisable \ - ROM_SMBusSlaveI2CDisable -#else -#define MAP_SMBusSlaveI2CDisable \ - SMBusSlaveI2CDisable -#endif -#ifdef ROM_SMBusSlaveI2CEnable -#define MAP_SMBusSlaveI2CEnable \ - ROM_SMBusSlaveI2CEnable -#else -#define MAP_SMBusSlaveI2CEnable \ - SMBusSlaveI2CEnable -#endif -#ifdef ROM_SMBusSlaveInit -#define MAP_SMBusSlaveInit \ - ROM_SMBusSlaveInit -#else -#define MAP_SMBusSlaveInit \ - SMBusSlaveInit -#endif -#ifdef ROM_SMBusSlaveIntAddressGet -#define MAP_SMBusSlaveIntAddressGet \ - ROM_SMBusSlaveIntAddressGet -#else -#define MAP_SMBusSlaveIntAddressGet \ - SMBusSlaveIntAddressGet -#endif -#ifdef ROM_SMBusSlaveIntEnable -#define MAP_SMBusSlaveIntEnable \ - ROM_SMBusSlaveIntEnable -#else -#define MAP_SMBusSlaveIntEnable \ - SMBusSlaveIntEnable -#endif -#ifdef ROM_SMBusSlaveIntProcess -#define MAP_SMBusSlaveIntProcess \ - ROM_SMBusSlaveIntProcess -#else -#define MAP_SMBusSlaveIntProcess \ - SMBusSlaveIntProcess -#endif -#ifdef ROM_SMBusSlaveManualACKDisable -#define MAP_SMBusSlaveManualACKDisable \ - ROM_SMBusSlaveManualACKDisable -#else -#define MAP_SMBusSlaveManualACKDisable \ - SMBusSlaveManualACKDisable -#endif -#ifdef ROM_SMBusSlaveManualACKEnable -#define MAP_SMBusSlaveManualACKEnable \ - ROM_SMBusSlaveManualACKEnable -#else -#define MAP_SMBusSlaveManualACKEnable \ - SMBusSlaveManualACKEnable -#endif -#ifdef ROM_SMBusSlaveManualACKStatusGet -#define MAP_SMBusSlaveManualACKStatusGet \ - ROM_SMBusSlaveManualACKStatusGet -#else -#define MAP_SMBusSlaveManualACKStatusGet \ - SMBusSlaveManualACKStatusGet -#endif -#ifdef ROM_SMBusSlaveProcessCallDisable -#define MAP_SMBusSlaveProcessCallDisable \ - ROM_SMBusSlaveProcessCallDisable -#else -#define MAP_SMBusSlaveProcessCallDisable \ - SMBusSlaveProcessCallDisable -#endif -#ifdef ROM_SMBusSlaveProcessCallEnable -#define MAP_SMBusSlaveProcessCallEnable \ - ROM_SMBusSlaveProcessCallEnable -#else -#define MAP_SMBusSlaveProcessCallEnable \ - SMBusSlaveProcessCallEnable -#endif -#ifdef ROM_SMBusSlaveRxBufferSet -#define MAP_SMBusSlaveRxBufferSet \ - ROM_SMBusSlaveRxBufferSet -#else -#define MAP_SMBusSlaveRxBufferSet \ - SMBusSlaveRxBufferSet -#endif -#ifdef ROM_SMBusSlaveTransferInit -#define MAP_SMBusSlaveTransferInit \ - ROM_SMBusSlaveTransferInit -#else -#define MAP_SMBusSlaveTransferInit \ - SMBusSlaveTransferInit -#endif -#ifdef ROM_SMBusSlaveTxBufferSet -#define MAP_SMBusSlaveTxBufferSet \ - ROM_SMBusSlaveTxBufferSet -#else -#define MAP_SMBusSlaveTxBufferSet \ - SMBusSlaveTxBufferSet -#endif -#ifdef ROM_SMBusSlaveUDIDSet -#define MAP_SMBusSlaveUDIDSet \ - ROM_SMBusSlaveUDIDSet -#else -#define MAP_SMBusSlaveUDIDSet \ - SMBusSlaveUDIDSet -#endif -#ifdef ROM_SMBusStatusGet -#define MAP_SMBusStatusGet \ - ROM_SMBusStatusGet -#else -#define MAP_SMBusStatusGet \ - SMBusStatusGet -#endif -#ifdef ROM_SMBusSlaveDataSend -#define MAP_SMBusSlaveDataSend \ - ROM_SMBusSlaveDataSend -#else -#define MAP_SMBusSlaveDataSend \ - SMBusSlaveDataSend -#endif - -//***************************************************************************** -// -// Macros for the SSI API. -// -//***************************************************************************** -#ifdef ROM_SSIDataPut -#define MAP_SSIDataPut \ - ROM_SSIDataPut -#else -#define MAP_SSIDataPut \ - SSIDataPut -#endif -#ifdef ROM_SSIConfigSetExpClk -#define MAP_SSIConfigSetExpClk \ - ROM_SSIConfigSetExpClk -#else -#define MAP_SSIConfigSetExpClk \ - SSIConfigSetExpClk -#endif -#ifdef ROM_SSIEnable -#define MAP_SSIEnable \ - ROM_SSIEnable -#else -#define MAP_SSIEnable \ - SSIEnable -#endif -#ifdef ROM_SSIDisable -#define MAP_SSIDisable \ - ROM_SSIDisable -#else -#define MAP_SSIDisable \ - SSIDisable -#endif -#ifdef ROM_SSIIntEnable -#define MAP_SSIIntEnable \ - ROM_SSIIntEnable -#else -#define MAP_SSIIntEnable \ - SSIIntEnable -#endif -#ifdef ROM_SSIIntDisable -#define MAP_SSIIntDisable \ - ROM_SSIIntDisable -#else -#define MAP_SSIIntDisable \ - SSIIntDisable -#endif -#ifdef ROM_SSIIntStatus -#define MAP_SSIIntStatus \ - ROM_SSIIntStatus -#else -#define MAP_SSIIntStatus \ - SSIIntStatus -#endif -#ifdef ROM_SSIIntClear -#define MAP_SSIIntClear \ - ROM_SSIIntClear -#else -#define MAP_SSIIntClear \ - SSIIntClear -#endif -#ifdef ROM_SSIDataPutNonBlocking -#define MAP_SSIDataPutNonBlocking \ - ROM_SSIDataPutNonBlocking -#else -#define MAP_SSIDataPutNonBlocking \ - SSIDataPutNonBlocking -#endif -#ifdef ROM_SSIDataGet -#define MAP_SSIDataGet \ - ROM_SSIDataGet -#else -#define MAP_SSIDataGet \ - SSIDataGet -#endif -#ifdef ROM_SSIDataGetNonBlocking -#define MAP_SSIDataGetNonBlocking \ - ROM_SSIDataGetNonBlocking -#else -#define MAP_SSIDataGetNonBlocking \ - SSIDataGetNonBlocking -#endif -#ifdef ROM_SSIDMAEnable -#define MAP_SSIDMAEnable \ - ROM_SSIDMAEnable -#else -#define MAP_SSIDMAEnable \ - SSIDMAEnable -#endif -#ifdef ROM_SSIDMADisable -#define MAP_SSIDMADisable \ - ROM_SSIDMADisable -#else -#define MAP_SSIDMADisable \ - SSIDMADisable -#endif -#ifdef ROM_SSIBusy -#define MAP_SSIBusy \ - ROM_SSIBusy -#else -#define MAP_SSIBusy \ - SSIBusy -#endif -#ifdef ROM_SSIClockSourceGet -#define MAP_SSIClockSourceGet \ - ROM_SSIClockSourceGet -#else -#define MAP_SSIClockSourceGet \ - SSIClockSourceGet -#endif -#ifdef ROM_SSIClockSourceSet -#define MAP_SSIClockSourceSet \ - ROM_SSIClockSourceSet -#else -#define MAP_SSIClockSourceSet \ - SSIClockSourceSet -#endif - -//***************************************************************************** -// -// Macros for the SysCtl API. -// -//***************************************************************************** -#ifdef ROM_SysCtlSleep -#define MAP_SysCtlSleep \ - ROM_SysCtlSleep -#else -#define MAP_SysCtlSleep \ - SysCtlSleep -#endif -#ifdef ROM_SysCtlSRAMSizeGet -#define MAP_SysCtlSRAMSizeGet \ - ROM_SysCtlSRAMSizeGet -#else -#define MAP_SysCtlSRAMSizeGet \ - SysCtlSRAMSizeGet -#endif -#ifdef ROM_SysCtlFlashSizeGet -#define MAP_SysCtlFlashSizeGet \ - ROM_SysCtlFlashSizeGet -#else -#define MAP_SysCtlFlashSizeGet \ - SysCtlFlashSizeGet -#endif -#ifdef ROM_SysCtlPinPresent -#define MAP_SysCtlPinPresent \ - ROM_SysCtlPinPresent -#else -#define MAP_SysCtlPinPresent \ - SysCtlPinPresent -#endif -#ifdef ROM_SysCtlPeripheralPresent -#define MAP_SysCtlPeripheralPresent \ - ROM_SysCtlPeripheralPresent -#else -#define MAP_SysCtlPeripheralPresent \ - SysCtlPeripheralPresent -#endif -#ifdef ROM_SysCtlPeripheralReset -#define MAP_SysCtlPeripheralReset \ - ROM_SysCtlPeripheralReset -#else -#define MAP_SysCtlPeripheralReset \ - SysCtlPeripheralReset -#endif -#ifdef ROM_SysCtlPeripheralEnable -#define MAP_SysCtlPeripheralEnable \ - ROM_SysCtlPeripheralEnable -#else -#define MAP_SysCtlPeripheralEnable \ - SysCtlPeripheralEnable -#endif -#ifdef ROM_SysCtlPeripheralDisable -#define MAP_SysCtlPeripheralDisable \ - ROM_SysCtlPeripheralDisable -#else -#define MAP_SysCtlPeripheralDisable \ - SysCtlPeripheralDisable -#endif -#ifdef ROM_SysCtlPeripheralSleepEnable -#define MAP_SysCtlPeripheralSleepEnable \ - ROM_SysCtlPeripheralSleepEnable -#else -#define MAP_SysCtlPeripheralSleepEnable \ - SysCtlPeripheralSleepEnable -#endif -#ifdef ROM_SysCtlPeripheralSleepDisable -#define MAP_SysCtlPeripheralSleepDisable \ - ROM_SysCtlPeripheralSleepDisable -#else -#define MAP_SysCtlPeripheralSleepDisable \ - SysCtlPeripheralSleepDisable -#endif -#ifdef ROM_SysCtlPeripheralDeepSleepEnable -#define MAP_SysCtlPeripheralDeepSleepEnable \ - ROM_SysCtlPeripheralDeepSleepEnable -#else -#define MAP_SysCtlPeripheralDeepSleepEnable \ - SysCtlPeripheralDeepSleepEnable -#endif -#ifdef ROM_SysCtlPeripheralDeepSleepDisable -#define MAP_SysCtlPeripheralDeepSleepDisable \ - ROM_SysCtlPeripheralDeepSleepDisable -#else -#define MAP_SysCtlPeripheralDeepSleepDisable \ - SysCtlPeripheralDeepSleepDisable -#endif -#ifdef ROM_SysCtlPeripheralClockGating -#define MAP_SysCtlPeripheralClockGating \ - ROM_SysCtlPeripheralClockGating -#else -#define MAP_SysCtlPeripheralClockGating \ - SysCtlPeripheralClockGating -#endif -#ifdef ROM_SysCtlIntEnable -#define MAP_SysCtlIntEnable \ - ROM_SysCtlIntEnable -#else -#define MAP_SysCtlIntEnable \ - SysCtlIntEnable -#endif -#ifdef ROM_SysCtlIntDisable -#define MAP_SysCtlIntDisable \ - ROM_SysCtlIntDisable -#else -#define MAP_SysCtlIntDisable \ - SysCtlIntDisable -#endif -#ifdef ROM_SysCtlIntClear -#define MAP_SysCtlIntClear \ - ROM_SysCtlIntClear -#else -#define MAP_SysCtlIntClear \ - SysCtlIntClear -#endif -#ifdef ROM_SysCtlIntStatus -#define MAP_SysCtlIntStatus \ - ROM_SysCtlIntStatus -#else -#define MAP_SysCtlIntStatus \ - SysCtlIntStatus -#endif -#ifdef ROM_SysCtlLDOSet -#define MAP_SysCtlLDOSet \ - ROM_SysCtlLDOSet -#else -#define MAP_SysCtlLDOSet \ - SysCtlLDOSet -#endif -#ifdef ROM_SysCtlLDOGet -#define MAP_SysCtlLDOGet \ - ROM_SysCtlLDOGet -#else -#define MAP_SysCtlLDOGet \ - SysCtlLDOGet -#endif -#ifdef ROM_SysCtlReset -#define MAP_SysCtlReset \ - ROM_SysCtlReset -#else -#define MAP_SysCtlReset \ - SysCtlReset -#endif -#ifdef ROM_SysCtlDeepSleep -#define MAP_SysCtlDeepSleep \ - ROM_SysCtlDeepSleep -#else -#define MAP_SysCtlDeepSleep \ - SysCtlDeepSleep -#endif -#ifdef ROM_SysCtlResetCauseGet -#define MAP_SysCtlResetCauseGet \ - ROM_SysCtlResetCauseGet -#else -#define MAP_SysCtlResetCauseGet \ - SysCtlResetCauseGet -#endif -#ifdef ROM_SysCtlResetCauseClear -#define MAP_SysCtlResetCauseClear \ - ROM_SysCtlResetCauseClear -#else -#define MAP_SysCtlResetCauseClear \ - SysCtlResetCauseClear -#endif -#ifdef ROM_SysCtlClockSet -#define MAP_SysCtlClockSet \ - ROM_SysCtlClockSet -#else -#define MAP_SysCtlClockSet \ - SysCtlClockSet -#endif -#ifdef ROM_SysCtlClockGet -#define MAP_SysCtlClockGet \ - ROM_SysCtlClockGet -#else -#define MAP_SysCtlClockGet \ - SysCtlClockGet -#endif -#ifdef ROM_SysCtlPWMClockSet -#define MAP_SysCtlPWMClockSet \ - ROM_SysCtlPWMClockSet -#else -#define MAP_SysCtlPWMClockSet \ - SysCtlPWMClockSet -#endif -#ifdef ROM_SysCtlPWMClockGet -#define MAP_SysCtlPWMClockGet \ - ROM_SysCtlPWMClockGet -#else -#define MAP_SysCtlPWMClockGet \ - SysCtlPWMClockGet -#endif -#ifdef ROM_SysCtlADCSpeedSet -#define MAP_SysCtlADCSpeedSet \ - ROM_SysCtlADCSpeedSet -#else -#define MAP_SysCtlADCSpeedSet \ - SysCtlADCSpeedSet -#endif -#ifdef ROM_SysCtlADCSpeedGet -#define MAP_SysCtlADCSpeedGet \ - ROM_SysCtlADCSpeedGet -#else -#define MAP_SysCtlADCSpeedGet \ - SysCtlADCSpeedGet -#endif -#ifdef ROM_SysCtlGPIOAHBEnable -#define MAP_SysCtlGPIOAHBEnable \ - ROM_SysCtlGPIOAHBEnable -#else -#define MAP_SysCtlGPIOAHBEnable \ - SysCtlGPIOAHBEnable -#endif -#ifdef ROM_SysCtlGPIOAHBDisable -#define MAP_SysCtlGPIOAHBDisable \ - ROM_SysCtlGPIOAHBDisable -#else -#define MAP_SysCtlGPIOAHBDisable \ - SysCtlGPIOAHBDisable -#endif -#ifdef ROM_SysCtlUSBPLLEnable -#define MAP_SysCtlUSBPLLEnable \ - ROM_SysCtlUSBPLLEnable -#else -#define MAP_SysCtlUSBPLLEnable \ - SysCtlUSBPLLEnable -#endif -#ifdef ROM_SysCtlUSBPLLDisable -#define MAP_SysCtlUSBPLLDisable \ - ROM_SysCtlUSBPLLDisable -#else -#define MAP_SysCtlUSBPLLDisable \ - SysCtlUSBPLLDisable -#endif -#ifdef ROM_SysCtlI2SMClkSet -#define MAP_SysCtlI2SMClkSet \ - ROM_SysCtlI2SMClkSet -#else -#define MAP_SysCtlI2SMClkSet \ - SysCtlI2SMClkSet -#endif -#ifdef ROM_SysCtlDelay -#define MAP_SysCtlDelay \ - ROM_SysCtlDelay -#else -#define MAP_SysCtlDelay \ - SysCtlDelay -#endif -#ifdef ROM_SysCtlPeripheralReady -#define MAP_SysCtlPeripheralReady \ - ROM_SysCtlPeripheralReady -#else -#define MAP_SysCtlPeripheralReady \ - SysCtlPeripheralReady -#endif -#ifdef ROM_SysCtlPeripheralPowerOn -#define MAP_SysCtlPeripheralPowerOn \ - ROM_SysCtlPeripheralPowerOn -#else -#define MAP_SysCtlPeripheralPowerOn \ - SysCtlPeripheralPowerOn -#endif -#ifdef ROM_SysCtlPeripheralPowerOff -#define MAP_SysCtlPeripheralPowerOff \ - ROM_SysCtlPeripheralPowerOff -#else -#define MAP_SysCtlPeripheralPowerOff \ - SysCtlPeripheralPowerOff -#endif -#ifdef ROM_SysCtlMOSCConfigSet -#define MAP_SysCtlMOSCConfigSet \ - ROM_SysCtlMOSCConfigSet -#else -#define MAP_SysCtlMOSCConfigSet \ - SysCtlMOSCConfigSet -#endif -#ifdef ROM_SysCtlPIOSCCalibrate -#define MAP_SysCtlPIOSCCalibrate \ - ROM_SysCtlPIOSCCalibrate -#else -#define MAP_SysCtlPIOSCCalibrate \ - SysCtlPIOSCCalibrate -#endif -#ifdef ROM_SysCtlDeepSleepClockSet -#define MAP_SysCtlDeepSleepClockSet \ - ROM_SysCtlDeepSleepClockSet -#else -#define MAP_SysCtlDeepSleepClockSet \ - SysCtlDeepSleepClockSet -#endif - -//***************************************************************************** -// -// Macros for the SysExc API. -// -//***************************************************************************** -#ifdef ROM_SysExcIntStatus -#define MAP_SysExcIntStatus \ - ROM_SysExcIntStatus -#else -#define MAP_SysExcIntStatus \ - SysExcIntStatus -#endif -#ifdef ROM_SysExcIntClear -#define MAP_SysExcIntClear \ - ROM_SysExcIntClear -#else -#define MAP_SysExcIntClear \ - SysExcIntClear -#endif -#ifdef ROM_SysExcIntDisable -#define MAP_SysExcIntDisable \ - ROM_SysExcIntDisable -#else -#define MAP_SysExcIntDisable \ - SysExcIntDisable -#endif -#ifdef ROM_SysExcIntEnable -#define MAP_SysExcIntEnable \ - ROM_SysExcIntEnable -#else -#define MAP_SysExcIntEnable \ - SysExcIntEnable -#endif - -//***************************************************************************** -// -// Macros for the SysTick API. -// -//***************************************************************************** -#ifdef ROM_SysTickValueGet -#define MAP_SysTickValueGet \ - ROM_SysTickValueGet -#else -#define MAP_SysTickValueGet \ - SysTickValueGet -#endif -#ifdef ROM_SysTickEnable -#define MAP_SysTickEnable \ - ROM_SysTickEnable -#else -#define MAP_SysTickEnable \ - SysTickEnable -#endif -#ifdef ROM_SysTickDisable -#define MAP_SysTickDisable \ - ROM_SysTickDisable -#else -#define MAP_SysTickDisable \ - SysTickDisable -#endif -#ifdef ROM_SysTickIntEnable -#define MAP_SysTickIntEnable \ - ROM_SysTickIntEnable -#else -#define MAP_SysTickIntEnable \ - SysTickIntEnable -#endif -#ifdef ROM_SysTickIntDisable -#define MAP_SysTickIntDisable \ - ROM_SysTickIntDisable -#else -#define MAP_SysTickIntDisable \ - SysTickIntDisable -#endif -#ifdef ROM_SysTickPeriodSet -#define MAP_SysTickPeriodSet \ - ROM_SysTickPeriodSet -#else -#define MAP_SysTickPeriodSet \ - SysTickPeriodSet -#endif -#ifdef ROM_SysTickPeriodGet -#define MAP_SysTickPeriodGet \ - ROM_SysTickPeriodGet -#else -#define MAP_SysTickPeriodGet \ - SysTickPeriodGet -#endif - -//***************************************************************************** -// -// Macros for the Timer API. -// -//***************************************************************************** -#ifdef ROM_TimerIntClear -#define MAP_TimerIntClear \ - ROM_TimerIntClear -#else -#define MAP_TimerIntClear \ - TimerIntClear -#endif -#ifdef ROM_TimerEnable -#define MAP_TimerEnable \ - ROM_TimerEnable -#else -#define MAP_TimerEnable \ - TimerEnable -#endif -#ifdef ROM_TimerDisable -#define MAP_TimerDisable \ - ROM_TimerDisable -#else -#define MAP_TimerDisable \ - TimerDisable -#endif -#ifdef ROM_TimerConfigure -#define MAP_TimerConfigure \ - ROM_TimerConfigure -#else -#define MAP_TimerConfigure \ - TimerConfigure -#endif -#ifdef ROM_TimerControlLevel -#define MAP_TimerControlLevel \ - ROM_TimerControlLevel -#else -#define MAP_TimerControlLevel \ - TimerControlLevel -#endif -#ifdef ROM_TimerControlTrigger -#define MAP_TimerControlTrigger \ - ROM_TimerControlTrigger -#else -#define MAP_TimerControlTrigger \ - TimerControlTrigger -#endif -#ifdef ROM_TimerControlEvent -#define MAP_TimerControlEvent \ - ROM_TimerControlEvent -#else -#define MAP_TimerControlEvent \ - TimerControlEvent -#endif -#ifdef ROM_TimerControlStall -#define MAP_TimerControlStall \ - ROM_TimerControlStall -#else -#define MAP_TimerControlStall \ - TimerControlStall -#endif -#ifdef ROM_TimerRTCEnable -#define MAP_TimerRTCEnable \ - ROM_TimerRTCEnable -#else -#define MAP_TimerRTCEnable \ - TimerRTCEnable -#endif -#ifdef ROM_TimerRTCDisable -#define MAP_TimerRTCDisable \ - ROM_TimerRTCDisable -#else -#define MAP_TimerRTCDisable \ - TimerRTCDisable -#endif -#ifdef ROM_TimerPrescaleSet -#define MAP_TimerPrescaleSet \ - ROM_TimerPrescaleSet -#else -#define MAP_TimerPrescaleSet \ - TimerPrescaleSet -#endif -#ifdef ROM_TimerPrescaleGet -#define MAP_TimerPrescaleGet \ - ROM_TimerPrescaleGet -#else -#define MAP_TimerPrescaleGet \ - TimerPrescaleGet -#endif -#ifdef ROM_TimerPrescaleMatchSet -#define MAP_TimerPrescaleMatchSet \ - ROM_TimerPrescaleMatchSet -#else -#define MAP_TimerPrescaleMatchSet \ - TimerPrescaleMatchSet -#endif -#ifdef ROM_TimerPrescaleMatchGet -#define MAP_TimerPrescaleMatchGet \ - ROM_TimerPrescaleMatchGet -#else -#define MAP_TimerPrescaleMatchGet \ - TimerPrescaleMatchGet -#endif -#ifdef ROM_TimerLoadSet -#define MAP_TimerLoadSet \ - ROM_TimerLoadSet -#else -#define MAP_TimerLoadSet \ - TimerLoadSet -#endif -#ifdef ROM_TimerLoadGet -#define MAP_TimerLoadGet \ - ROM_TimerLoadGet -#else -#define MAP_TimerLoadGet \ - TimerLoadGet -#endif -#ifdef ROM_TimerValueGet -#define MAP_TimerValueGet \ - ROM_TimerValueGet -#else -#define MAP_TimerValueGet \ - TimerValueGet -#endif -#ifdef ROM_TimerMatchSet -#define MAP_TimerMatchSet \ - ROM_TimerMatchSet -#else -#define MAP_TimerMatchSet \ - TimerMatchSet -#endif -#ifdef ROM_TimerMatchGet -#define MAP_TimerMatchGet \ - ROM_TimerMatchGet -#else -#define MAP_TimerMatchGet \ - TimerMatchGet -#endif -#ifdef ROM_TimerIntEnable -#define MAP_TimerIntEnable \ - ROM_TimerIntEnable -#else -#define MAP_TimerIntEnable \ - TimerIntEnable -#endif -#ifdef ROM_TimerIntDisable -#define MAP_TimerIntDisable \ - ROM_TimerIntDisable -#else -#define MAP_TimerIntDisable \ - TimerIntDisable -#endif -#ifdef ROM_TimerIntStatus -#define MAP_TimerIntStatus \ - ROM_TimerIntStatus -#else -#define MAP_TimerIntStatus \ - TimerIntStatus -#endif -#ifdef ROM_TimerControlWaitOnTrigger -#define MAP_TimerControlWaitOnTrigger \ - ROM_TimerControlWaitOnTrigger -#else -#define MAP_TimerControlWaitOnTrigger \ - TimerControlWaitOnTrigger -#endif -#ifdef ROM_TimerLoadSet64 -#define MAP_TimerLoadSet64 \ - ROM_TimerLoadSet64 -#else -#define MAP_TimerLoadSet64 \ - TimerLoadSet64 -#endif -#ifdef ROM_TimerLoadGet64 -#define MAP_TimerLoadGet64 \ - ROM_TimerLoadGet64 -#else -#define MAP_TimerLoadGet64 \ - TimerLoadGet64 -#endif -#ifdef ROM_TimerValueGet64 -#define MAP_TimerValueGet64 \ - ROM_TimerValueGet64 -#else -#define MAP_TimerValueGet64 \ - TimerValueGet64 -#endif -#ifdef ROM_TimerMatchSet64 -#define MAP_TimerMatchSet64 \ - ROM_TimerMatchSet64 -#else -#define MAP_TimerMatchSet64 \ - TimerMatchSet64 -#endif -#ifdef ROM_TimerMatchGet64 -#define MAP_TimerMatchGet64 \ - ROM_TimerMatchGet64 -#else -#define MAP_TimerMatchGet64 \ - TimerMatchGet64 -#endif - -//***************************************************************************** -// -// Macros for the UART API. -// -//***************************************************************************** -#ifdef ROM_UARTCharPut -#define MAP_UARTCharPut \ - ROM_UARTCharPut -#else -#define MAP_UARTCharPut \ - UARTCharPut -#endif -#ifdef ROM_UARTParityModeSet -#define MAP_UARTParityModeSet \ - ROM_UARTParityModeSet -#else -#define MAP_UARTParityModeSet \ - UARTParityModeSet -#endif -#ifdef ROM_UARTParityModeGet -#define MAP_UARTParityModeGet \ - ROM_UARTParityModeGet -#else -#define MAP_UARTParityModeGet \ - UARTParityModeGet -#endif -#ifdef ROM_UARTFIFOLevelSet -#define MAP_UARTFIFOLevelSet \ - ROM_UARTFIFOLevelSet -#else -#define MAP_UARTFIFOLevelSet \ - UARTFIFOLevelSet -#endif -#ifdef ROM_UARTFIFOLevelGet -#define MAP_UARTFIFOLevelGet \ - ROM_UARTFIFOLevelGet -#else -#define MAP_UARTFIFOLevelGet \ - UARTFIFOLevelGet -#endif -#ifdef ROM_UARTConfigSetExpClk -#define MAP_UARTConfigSetExpClk \ - ROM_UARTConfigSetExpClk -#else -#define MAP_UARTConfigSetExpClk \ - UARTConfigSetExpClk -#endif -#ifdef ROM_UARTConfigGetExpClk -#define MAP_UARTConfigGetExpClk \ - ROM_UARTConfigGetExpClk -#else -#define MAP_UARTConfigGetExpClk \ - UARTConfigGetExpClk -#endif -#ifdef ROM_UARTEnable -#define MAP_UARTEnable \ - ROM_UARTEnable -#else -#define MAP_UARTEnable \ - UARTEnable -#endif -#ifdef ROM_UARTDisable -#define MAP_UARTDisable \ - ROM_UARTDisable -#else -#define MAP_UARTDisable \ - UARTDisable -#endif -#ifdef ROM_UARTEnableSIR -#define MAP_UARTEnableSIR \ - ROM_UARTEnableSIR -#else -#define MAP_UARTEnableSIR \ - UARTEnableSIR -#endif -#ifdef ROM_UARTDisableSIR -#define MAP_UARTDisableSIR \ - ROM_UARTDisableSIR -#else -#define MAP_UARTDisableSIR \ - UARTDisableSIR -#endif -#ifdef ROM_UARTCharsAvail -#define MAP_UARTCharsAvail \ - ROM_UARTCharsAvail -#else -#define MAP_UARTCharsAvail \ - UARTCharsAvail -#endif -#ifdef ROM_UARTSpaceAvail -#define MAP_UARTSpaceAvail \ - ROM_UARTSpaceAvail -#else -#define MAP_UARTSpaceAvail \ - UARTSpaceAvail -#endif -#ifdef ROM_UARTCharGetNonBlocking -#define MAP_UARTCharGetNonBlocking \ - ROM_UARTCharGetNonBlocking -#else -#define MAP_UARTCharGetNonBlocking \ - UARTCharGetNonBlocking -#endif -#ifdef ROM_UARTCharGet -#define MAP_UARTCharGet \ - ROM_UARTCharGet -#else -#define MAP_UARTCharGet \ - UARTCharGet -#endif -#ifdef ROM_UARTCharPutNonBlocking -#define MAP_UARTCharPutNonBlocking \ - ROM_UARTCharPutNonBlocking -#else -#define MAP_UARTCharPutNonBlocking \ - UARTCharPutNonBlocking -#endif -#ifdef ROM_UARTBreakCtl -#define MAP_UARTBreakCtl \ - ROM_UARTBreakCtl -#else -#define MAP_UARTBreakCtl \ - UARTBreakCtl -#endif -#ifdef ROM_UARTIntEnable -#define MAP_UARTIntEnable \ - ROM_UARTIntEnable -#else -#define MAP_UARTIntEnable \ - UARTIntEnable -#endif -#ifdef ROM_UARTIntDisable -#define MAP_UARTIntDisable \ - ROM_UARTIntDisable -#else -#define MAP_UARTIntDisable \ - UARTIntDisable -#endif -#ifdef ROM_UARTIntStatus -#define MAP_UARTIntStatus \ - ROM_UARTIntStatus -#else -#define MAP_UARTIntStatus \ - UARTIntStatus -#endif -#ifdef ROM_UARTIntClear -#define MAP_UARTIntClear \ - ROM_UARTIntClear -#else -#define MAP_UARTIntClear \ - UARTIntClear -#endif -#ifdef ROM_UARTDMAEnable -#define MAP_UARTDMAEnable \ - ROM_UARTDMAEnable -#else -#define MAP_UARTDMAEnable \ - UARTDMAEnable -#endif -#ifdef ROM_UARTDMADisable -#define MAP_UARTDMADisable \ - ROM_UARTDMADisable -#else -#define MAP_UARTDMADisable \ - UARTDMADisable -#endif -#ifdef ROM_UARTFIFOEnable -#define MAP_UARTFIFOEnable \ - ROM_UARTFIFOEnable -#else -#define MAP_UARTFIFOEnable \ - UARTFIFOEnable -#endif -#ifdef ROM_UARTFIFODisable -#define MAP_UARTFIFODisable \ - ROM_UARTFIFODisable -#else -#define MAP_UARTFIFODisable \ - UARTFIFODisable -#endif -#ifdef ROM_UARTBusy -#define MAP_UARTBusy \ - ROM_UARTBusy -#else -#define MAP_UARTBusy \ - UARTBusy -#endif -#ifdef ROM_UARTTxIntModeSet -#define MAP_UARTTxIntModeSet \ - ROM_UARTTxIntModeSet -#else -#define MAP_UARTTxIntModeSet \ - UARTTxIntModeSet -#endif -#ifdef ROM_UARTTxIntModeGet -#define MAP_UARTTxIntModeGet \ - ROM_UARTTxIntModeGet -#else -#define MAP_UARTTxIntModeGet \ - UARTTxIntModeGet -#endif -#ifdef ROM_UARTRxErrorGet -#define MAP_UARTRxErrorGet \ - ROM_UARTRxErrorGet -#else -#define MAP_UARTRxErrorGet \ - UARTRxErrorGet -#endif -#ifdef ROM_UARTRxErrorClear -#define MAP_UARTRxErrorClear \ - ROM_UARTRxErrorClear -#else -#define MAP_UARTRxErrorClear \ - UARTRxErrorClear -#endif -#ifdef ROM_UARTClockSourceSet -#define MAP_UARTClockSourceSet \ - ROM_UARTClockSourceSet -#else -#define MAP_UARTClockSourceSet \ - UARTClockSourceSet -#endif -#ifdef ROM_UARTClockSourceGet -#define MAP_UARTClockSourceGet \ - ROM_UARTClockSourceGet -#else -#define MAP_UARTClockSourceGet \ - UARTClockSourceGet -#endif -#ifdef ROM_UART9BitEnable -#define MAP_UART9BitEnable \ - ROM_UART9BitEnable -#else -#define MAP_UART9BitEnable \ - UART9BitEnable -#endif -#ifdef ROM_UART9BitDisable -#define MAP_UART9BitDisable \ - ROM_UART9BitDisable -#else -#define MAP_UART9BitDisable \ - UART9BitDisable -#endif -#ifdef ROM_UART9BitAddrSet -#define MAP_UART9BitAddrSet \ - ROM_UART9BitAddrSet -#else -#define MAP_UART9BitAddrSet \ - UART9BitAddrSet -#endif -#ifdef ROM_UART9BitAddrSend -#define MAP_UART9BitAddrSend \ - ROM_UART9BitAddrSend -#else -#define MAP_UART9BitAddrSend \ - UART9BitAddrSend -#endif - -//***************************************************************************** -// -// Macros for the uDMA API. -// -//***************************************************************************** -#ifdef ROM_uDMAChannelTransferSet -#define MAP_uDMAChannelTransferSet \ - ROM_uDMAChannelTransferSet -#else -#define MAP_uDMAChannelTransferSet \ - uDMAChannelTransferSet -#endif -#ifdef ROM_uDMAEnable -#define MAP_uDMAEnable \ - ROM_uDMAEnable -#else -#define MAP_uDMAEnable \ - uDMAEnable -#endif -#ifdef ROM_uDMADisable -#define MAP_uDMADisable \ - ROM_uDMADisable -#else -#define MAP_uDMADisable \ - uDMADisable -#endif -#ifdef ROM_uDMAErrorStatusGet -#define MAP_uDMAErrorStatusGet \ - ROM_uDMAErrorStatusGet -#else -#define MAP_uDMAErrorStatusGet \ - uDMAErrorStatusGet -#endif -#ifdef ROM_uDMAErrorStatusClear -#define MAP_uDMAErrorStatusClear \ - ROM_uDMAErrorStatusClear -#else -#define MAP_uDMAErrorStatusClear \ - uDMAErrorStatusClear -#endif -#ifdef ROM_uDMAChannelEnable -#define MAP_uDMAChannelEnable \ - ROM_uDMAChannelEnable -#else -#define MAP_uDMAChannelEnable \ - uDMAChannelEnable -#endif -#ifdef ROM_uDMAChannelDisable -#define MAP_uDMAChannelDisable \ - ROM_uDMAChannelDisable -#else -#define MAP_uDMAChannelDisable \ - uDMAChannelDisable -#endif -#ifdef ROM_uDMAChannelIsEnabled -#define MAP_uDMAChannelIsEnabled \ - ROM_uDMAChannelIsEnabled -#else -#define MAP_uDMAChannelIsEnabled \ - uDMAChannelIsEnabled -#endif -#ifdef ROM_uDMAControlBaseSet -#define MAP_uDMAControlBaseSet \ - ROM_uDMAControlBaseSet -#else -#define MAP_uDMAControlBaseSet \ - uDMAControlBaseSet -#endif -#ifdef ROM_uDMAControlBaseGet -#define MAP_uDMAControlBaseGet \ - ROM_uDMAControlBaseGet -#else -#define MAP_uDMAControlBaseGet \ - uDMAControlBaseGet -#endif -#ifdef ROM_uDMAChannelRequest -#define MAP_uDMAChannelRequest \ - ROM_uDMAChannelRequest -#else -#define MAP_uDMAChannelRequest \ - uDMAChannelRequest -#endif -#ifdef ROM_uDMAChannelAttributeEnable -#define MAP_uDMAChannelAttributeEnable \ - ROM_uDMAChannelAttributeEnable -#else -#define MAP_uDMAChannelAttributeEnable \ - uDMAChannelAttributeEnable -#endif -#ifdef ROM_uDMAChannelAttributeDisable -#define MAP_uDMAChannelAttributeDisable \ - ROM_uDMAChannelAttributeDisable -#else -#define MAP_uDMAChannelAttributeDisable \ - uDMAChannelAttributeDisable -#endif -#ifdef ROM_uDMAChannelAttributeGet -#define MAP_uDMAChannelAttributeGet \ - ROM_uDMAChannelAttributeGet -#else -#define MAP_uDMAChannelAttributeGet \ - uDMAChannelAttributeGet -#endif -#ifdef ROM_uDMAChannelControlSet -#define MAP_uDMAChannelControlSet \ - ROM_uDMAChannelControlSet -#else -#define MAP_uDMAChannelControlSet \ - uDMAChannelControlSet -#endif -#ifdef ROM_uDMAChannelSizeGet -#define MAP_uDMAChannelSizeGet \ - ROM_uDMAChannelSizeGet -#else -#define MAP_uDMAChannelSizeGet \ - uDMAChannelSizeGet -#endif -#ifdef ROM_uDMAChannelModeGet -#define MAP_uDMAChannelModeGet \ - ROM_uDMAChannelModeGet -#else -#define MAP_uDMAChannelModeGet \ - uDMAChannelModeGet -#endif -#ifdef ROM_uDMAChannelSelectSecondary -#define MAP_uDMAChannelSelectSecondary \ - ROM_uDMAChannelSelectSecondary -#else -#define MAP_uDMAChannelSelectSecondary \ - uDMAChannelSelectSecondary -#endif -#ifdef ROM_uDMAChannelSelectDefault -#define MAP_uDMAChannelSelectDefault \ - ROM_uDMAChannelSelectDefault -#else -#define MAP_uDMAChannelSelectDefault \ - uDMAChannelSelectDefault -#endif -#ifdef ROM_uDMAIntStatus -#define MAP_uDMAIntStatus \ - ROM_uDMAIntStatus -#else -#define MAP_uDMAIntStatus \ - uDMAIntStatus -#endif -#ifdef ROM_uDMAIntClear -#define MAP_uDMAIntClear \ - ROM_uDMAIntClear -#else -#define MAP_uDMAIntClear \ - uDMAIntClear -#endif -#ifdef ROM_uDMAControlAlternateBaseGet -#define MAP_uDMAControlAlternateBaseGet \ - ROM_uDMAControlAlternateBaseGet -#else -#define MAP_uDMAControlAlternateBaseGet \ - uDMAControlAlternateBaseGet -#endif -#ifdef ROM_uDMAChannelScatterGatherSet -#define MAP_uDMAChannelScatterGatherSet \ - ROM_uDMAChannelScatterGatherSet -#else -#define MAP_uDMAChannelScatterGatherSet \ - uDMAChannelScatterGatherSet -#endif -#ifdef ROM_uDMAChannelAssign -#define MAP_uDMAChannelAssign \ - ROM_uDMAChannelAssign -#else -#define MAP_uDMAChannelAssign \ - uDMAChannelAssign -#endif - -//***************************************************************************** -// -// Macros for the USB API. -// -//***************************************************************************** -#ifdef ROM_USBIntStatus -#define MAP_USBIntStatus \ - ROM_USBIntStatus -#else -#define MAP_USBIntStatus \ - USBIntStatus -#endif -#ifdef ROM_USBDevAddrGet -#define MAP_USBDevAddrGet \ - ROM_USBDevAddrGet -#else -#define MAP_USBDevAddrGet \ - USBDevAddrGet -#endif -#ifdef ROM_USBDevAddrSet -#define MAP_USBDevAddrSet \ - ROM_USBDevAddrSet -#else -#define MAP_USBDevAddrSet \ - USBDevAddrSet -#endif -#ifdef ROM_USBDevConnect -#define MAP_USBDevConnect \ - ROM_USBDevConnect -#else -#define MAP_USBDevConnect \ - USBDevConnect -#endif -#ifdef ROM_USBDevDisconnect -#define MAP_USBDevDisconnect \ - ROM_USBDevDisconnect -#else -#define MAP_USBDevDisconnect \ - USBDevDisconnect -#endif -#ifdef ROM_USBDevEndpointConfigSet -#define MAP_USBDevEndpointConfigSet \ - ROM_USBDevEndpointConfigSet -#else -#define MAP_USBDevEndpointConfigSet \ - USBDevEndpointConfigSet -#endif -#ifdef ROM_USBDevEndpointDataAck -#define MAP_USBDevEndpointDataAck \ - ROM_USBDevEndpointDataAck -#else -#define MAP_USBDevEndpointDataAck \ - USBDevEndpointDataAck -#endif -#ifdef ROM_USBDevEndpointStall -#define MAP_USBDevEndpointStall \ - ROM_USBDevEndpointStall -#else -#define MAP_USBDevEndpointStall \ - USBDevEndpointStall -#endif -#ifdef ROM_USBDevEndpointStallClear -#define MAP_USBDevEndpointStallClear \ - ROM_USBDevEndpointStallClear -#else -#define MAP_USBDevEndpointStallClear \ - USBDevEndpointStallClear -#endif -#ifdef ROM_USBDevEndpointStatusClear -#define MAP_USBDevEndpointStatusClear \ - ROM_USBDevEndpointStatusClear -#else -#define MAP_USBDevEndpointStatusClear \ - USBDevEndpointStatusClear -#endif -#ifdef ROM_USBEndpointDataGet -#define MAP_USBEndpointDataGet \ - ROM_USBEndpointDataGet -#else -#define MAP_USBEndpointDataGet \ - USBEndpointDataGet -#endif -#ifdef ROM_USBEndpointDataPut -#define MAP_USBEndpointDataPut \ - ROM_USBEndpointDataPut -#else -#define MAP_USBEndpointDataPut \ - USBEndpointDataPut -#endif -#ifdef ROM_USBEndpointDataSend -#define MAP_USBEndpointDataSend \ - ROM_USBEndpointDataSend -#else -#define MAP_USBEndpointDataSend \ - USBEndpointDataSend -#endif -#ifdef ROM_USBEndpointDataToggleClear -#define MAP_USBEndpointDataToggleClear \ - ROM_USBEndpointDataToggleClear -#else -#define MAP_USBEndpointDataToggleClear \ - USBEndpointDataToggleClear -#endif -#ifdef ROM_USBEndpointStatus -#define MAP_USBEndpointStatus \ - ROM_USBEndpointStatus -#else -#define MAP_USBEndpointStatus \ - USBEndpointStatus -#endif -#ifdef ROM_USBFIFOAddrGet -#define MAP_USBFIFOAddrGet \ - ROM_USBFIFOAddrGet -#else -#define MAP_USBFIFOAddrGet \ - USBFIFOAddrGet -#endif -#ifdef ROM_USBFIFOConfigGet -#define MAP_USBFIFOConfigGet \ - ROM_USBFIFOConfigGet -#else -#define MAP_USBFIFOConfigGet \ - USBFIFOConfigGet -#endif -#ifdef ROM_USBFIFOConfigSet -#define MAP_USBFIFOConfigSet \ - ROM_USBFIFOConfigSet -#else -#define MAP_USBFIFOConfigSet \ - USBFIFOConfigSet -#endif -#ifdef ROM_USBFIFOFlush -#define MAP_USBFIFOFlush \ - ROM_USBFIFOFlush -#else -#define MAP_USBFIFOFlush \ - USBFIFOFlush -#endif -#ifdef ROM_USBFrameNumberGet -#define MAP_USBFrameNumberGet \ - ROM_USBFrameNumberGet -#else -#define MAP_USBFrameNumberGet \ - USBFrameNumberGet -#endif -#ifdef ROM_USBHostAddrGet -#define MAP_USBHostAddrGet \ - ROM_USBHostAddrGet -#else -#define MAP_USBHostAddrGet \ - USBHostAddrGet -#endif -#ifdef ROM_USBHostAddrSet -#define MAP_USBHostAddrSet \ - ROM_USBHostAddrSet -#else -#define MAP_USBHostAddrSet \ - USBHostAddrSet -#endif -#ifdef ROM_USBHostEndpointConfig -#define MAP_USBHostEndpointConfig \ - ROM_USBHostEndpointConfig -#else -#define MAP_USBHostEndpointConfig \ - USBHostEndpointConfig -#endif -#ifdef ROM_USBHostEndpointDataAck -#define MAP_USBHostEndpointDataAck \ - ROM_USBHostEndpointDataAck -#else -#define MAP_USBHostEndpointDataAck \ - USBHostEndpointDataAck -#endif -#ifdef ROM_USBHostEndpointDataToggle -#define MAP_USBHostEndpointDataToggle \ - ROM_USBHostEndpointDataToggle -#else -#define MAP_USBHostEndpointDataToggle \ - USBHostEndpointDataToggle -#endif -#ifdef ROM_USBHostEndpointStatusClear -#define MAP_USBHostEndpointStatusClear \ - ROM_USBHostEndpointStatusClear -#else -#define MAP_USBHostEndpointStatusClear \ - USBHostEndpointStatusClear -#endif -#ifdef ROM_USBHostHubAddrGet -#define MAP_USBHostHubAddrGet \ - ROM_USBHostHubAddrGet -#else -#define MAP_USBHostHubAddrGet \ - USBHostHubAddrGet -#endif -#ifdef ROM_USBHostHubAddrSet -#define MAP_USBHostHubAddrSet \ - ROM_USBHostHubAddrSet -#else -#define MAP_USBHostHubAddrSet \ - USBHostHubAddrSet -#endif -#ifdef ROM_USBHostPwrDisable -#define MAP_USBHostPwrDisable \ - ROM_USBHostPwrDisable -#else -#define MAP_USBHostPwrDisable \ - USBHostPwrDisable -#endif -#ifdef ROM_USBHostPwrEnable -#define MAP_USBHostPwrEnable \ - ROM_USBHostPwrEnable -#else -#define MAP_USBHostPwrEnable \ - USBHostPwrEnable -#endif -#ifdef ROM_USBHostPwrConfig -#define MAP_USBHostPwrConfig \ - ROM_USBHostPwrConfig -#else -#define MAP_USBHostPwrConfig \ - USBHostPwrConfig -#endif -#ifdef ROM_USBHostPwrFaultDisable -#define MAP_USBHostPwrFaultDisable \ - ROM_USBHostPwrFaultDisable -#else -#define MAP_USBHostPwrFaultDisable \ - USBHostPwrFaultDisable -#endif -#ifdef ROM_USBHostPwrFaultEnable -#define MAP_USBHostPwrFaultEnable \ - ROM_USBHostPwrFaultEnable -#else -#define MAP_USBHostPwrFaultEnable \ - USBHostPwrFaultEnable -#endif -#ifdef ROM_USBHostRequestIN -#define MAP_USBHostRequestIN \ - ROM_USBHostRequestIN -#else -#define MAP_USBHostRequestIN \ - USBHostRequestIN -#endif -#ifdef ROM_USBHostRequestStatus -#define MAP_USBHostRequestStatus \ - ROM_USBHostRequestStatus -#else -#define MAP_USBHostRequestStatus \ - USBHostRequestStatus -#endif -#ifdef ROM_USBHostReset -#define MAP_USBHostReset \ - ROM_USBHostReset -#else -#define MAP_USBHostReset \ - USBHostReset -#endif -#ifdef ROM_USBHostResume -#define MAP_USBHostResume \ - ROM_USBHostResume -#else -#define MAP_USBHostResume \ - USBHostResume -#endif -#ifdef ROM_USBHostSpeedGet -#define MAP_USBHostSpeedGet \ - ROM_USBHostSpeedGet -#else -#define MAP_USBHostSpeedGet \ - USBHostSpeedGet -#endif -#ifdef ROM_USBHostSuspend -#define MAP_USBHostSuspend \ - ROM_USBHostSuspend -#else -#define MAP_USBHostSuspend \ - USBHostSuspend -#endif -#ifdef ROM_USBIntDisable -#define MAP_USBIntDisable \ - ROM_USBIntDisable -#else -#define MAP_USBIntDisable \ - USBIntDisable -#endif -#ifdef ROM_USBIntEnable -#define MAP_USBIntEnable \ - ROM_USBIntEnable -#else -#define MAP_USBIntEnable \ - USBIntEnable -#endif -#ifdef ROM_USBDevEndpointConfigGet -#define MAP_USBDevEndpointConfigGet \ - ROM_USBDevEndpointConfigGet -#else -#define MAP_USBDevEndpointConfigGet \ - USBDevEndpointConfigGet -#endif -#ifdef ROM_USBEndpointDMAEnable -#define MAP_USBEndpointDMAEnable \ - ROM_USBEndpointDMAEnable -#else -#define MAP_USBEndpointDMAEnable \ - USBEndpointDMAEnable -#endif -#ifdef ROM_USBEndpointDMADisable -#define MAP_USBEndpointDMADisable \ - ROM_USBEndpointDMADisable -#else -#define MAP_USBEndpointDMADisable \ - USBEndpointDMADisable -#endif -#ifdef ROM_USBEndpointDataAvail -#define MAP_USBEndpointDataAvail \ - ROM_USBEndpointDataAvail -#else -#define MAP_USBEndpointDataAvail \ - USBEndpointDataAvail -#endif -#ifdef ROM_USBOTGHostRequest -#define MAP_USBOTGHostRequest \ - ROM_USBOTGHostRequest -#else -#define MAP_USBOTGHostRequest \ - USBOTGHostRequest -#endif -#ifdef ROM_USBModeGet -#define MAP_USBModeGet \ - ROM_USBModeGet -#else -#define MAP_USBModeGet \ - USBModeGet -#endif -#ifdef ROM_USBEndpointDMAChannel -#define MAP_USBEndpointDMAChannel \ - ROM_USBEndpointDMAChannel -#else -#define MAP_USBEndpointDMAChannel \ - USBEndpointDMAChannel -#endif -#ifdef ROM_USBIntDisableControl -#define MAP_USBIntDisableControl \ - ROM_USBIntDisableControl -#else -#define MAP_USBIntDisableControl \ - USBIntDisableControl -#endif -#ifdef ROM_USBIntEnableControl -#define MAP_USBIntEnableControl \ - ROM_USBIntEnableControl -#else -#define MAP_USBIntEnableControl \ - USBIntEnableControl -#endif -#ifdef ROM_USBIntStatusControl -#define MAP_USBIntStatusControl \ - ROM_USBIntStatusControl -#else -#define MAP_USBIntStatusControl \ - USBIntStatusControl -#endif -#ifdef ROM_USBIntStatus -#define MAP_USBIntStatus \ - ROM_USBIntStatus -#else -#define MAP_USBIntStatus \ - USBIntStatus -#endif -#ifdef ROM_USBIntDisableEndpoint -#define MAP_USBIntDisableEndpoint \ - ROM_USBIntDisableEndpoint -#else -#define MAP_USBIntDisableEndpoint \ - USBIntDisableEndpoint -#endif -#ifdef ROM_USBIntEnableEndpoint -#define MAP_USBIntEnableEndpoint \ - ROM_USBIntEnableEndpoint -#else -#define MAP_USBIntEnableEndpoint \ - USBIntEnableEndpoint -#endif -#ifdef ROM_USBIntStatusEndpoint -#define MAP_USBIntStatusEndpoint \ - ROM_USBIntStatusEndpoint -#else -#define MAP_USBIntStatusEndpoint \ - USBIntStatusEndpoint -#endif -#ifdef ROM_USBHostMode -#define MAP_USBHostMode \ - ROM_USBHostMode -#else -#define MAP_USBHostMode \ - USBHostMode -#endif -#ifdef ROM_USBDevMode -#define MAP_USBDevMode \ - ROM_USBDevMode -#else -#define MAP_USBDevMode \ - USBDevMode -#endif -#ifdef ROM_USBPHYPowerOff -#define MAP_USBPHYPowerOff \ - ROM_USBPHYPowerOff -#else -#define MAP_USBPHYPowerOff \ - USBPHYPowerOff -#endif -#ifdef ROM_USBPHYPowerOn -#define MAP_USBPHYPowerOn \ - ROM_USBPHYPowerOn -#else -#define MAP_USBPHYPowerOn \ - USBPHYPowerOn -#endif -#ifdef ROM_USBOTGMode -#define MAP_USBOTGMode \ - ROM_USBOTGMode -#else -#define MAP_USBOTGMode \ - USBOTGMode -#endif - -//***************************************************************************** -// -// Macros for the Watchdog API. -// -//***************************************************************************** -#ifdef ROM_WatchdogIntClear -#define MAP_WatchdogIntClear \ - ROM_WatchdogIntClear -#else -#define MAP_WatchdogIntClear \ - WatchdogIntClear -#endif -#ifdef ROM_WatchdogRunning -#define MAP_WatchdogRunning \ - ROM_WatchdogRunning -#else -#define MAP_WatchdogRunning \ - WatchdogRunning -#endif -#ifdef ROM_WatchdogEnable -#define MAP_WatchdogEnable \ - ROM_WatchdogEnable -#else -#define MAP_WatchdogEnable \ - WatchdogEnable -#endif -#ifdef ROM_WatchdogResetEnable -#define MAP_WatchdogResetEnable \ - ROM_WatchdogResetEnable -#else -#define MAP_WatchdogResetEnable \ - WatchdogResetEnable -#endif -#ifdef ROM_WatchdogResetDisable -#define MAP_WatchdogResetDisable \ - ROM_WatchdogResetDisable -#else -#define MAP_WatchdogResetDisable \ - WatchdogResetDisable -#endif -#ifdef ROM_WatchdogLock -#define MAP_WatchdogLock \ - ROM_WatchdogLock -#else -#define MAP_WatchdogLock \ - WatchdogLock -#endif -#ifdef ROM_WatchdogUnlock -#define MAP_WatchdogUnlock \ - ROM_WatchdogUnlock -#else -#define MAP_WatchdogUnlock \ - WatchdogUnlock -#endif -#ifdef ROM_WatchdogLockState -#define MAP_WatchdogLockState \ - ROM_WatchdogLockState -#else -#define MAP_WatchdogLockState \ - WatchdogLockState -#endif -#ifdef ROM_WatchdogReloadSet -#define MAP_WatchdogReloadSet \ - ROM_WatchdogReloadSet -#else -#define MAP_WatchdogReloadSet \ - WatchdogReloadSet -#endif -#ifdef ROM_WatchdogReloadGet -#define MAP_WatchdogReloadGet \ - ROM_WatchdogReloadGet -#else -#define MAP_WatchdogReloadGet \ - WatchdogReloadGet -#endif -#ifdef ROM_WatchdogValueGet -#define MAP_WatchdogValueGet \ - ROM_WatchdogValueGet -#else -#define MAP_WatchdogValueGet \ - WatchdogValueGet -#endif -#ifdef ROM_WatchdogIntEnable -#define MAP_WatchdogIntEnable \ - ROM_WatchdogIntEnable -#else -#define MAP_WatchdogIntEnable \ - WatchdogIntEnable -#endif -#ifdef ROM_WatchdogIntStatus -#define MAP_WatchdogIntStatus \ - ROM_WatchdogIntStatus -#else -#define MAP_WatchdogIntStatus \ - WatchdogIntStatus -#endif -#ifdef ROM_WatchdogStallEnable -#define MAP_WatchdogStallEnable \ - ROM_WatchdogStallEnable -#else -#define MAP_WatchdogStallEnable \ - WatchdogStallEnable -#endif -#ifdef ROM_WatchdogStallDisable -#define MAP_WatchdogStallDisable \ - ROM_WatchdogStallDisable -#else -#define MAP_WatchdogStallDisable \ - WatchdogStallDisable -#endif -#ifdef ROM_WatchdogIntTypeSet -#define MAP_WatchdogIntTypeSet \ - ROM_WatchdogIntTypeSet -#else -#define MAP_WatchdogIntTypeSet \ - WatchdogIntTypeSet -#endif - -//***************************************************************************** -// -// Macros for the Software API. -// -//***************************************************************************** -#ifdef ROM_Crc16Array -#define MAP_Crc16Array \ - ROM_Crc16Array -#else -#define MAP_Crc16Array \ - Crc16Array -#endif -#ifdef ROM_Crc16Array3 -#define MAP_Crc16Array3 \ - ROM_Crc16Array3 -#else -#define MAP_Crc16Array3 \ - Crc16Array3 -#endif -#ifdef ROM_Crc16 -#define MAP_Crc16 \ - ROM_Crc16 -#else -#define MAP_Crc16 \ - Crc16 -#endif -#ifdef ROM_Crc8CCITT -#define MAP_Crc8CCITT \ - ROM_Crc8CCITT -#else -#define MAP_Crc8CCITT \ - Crc8CCITT -#endif - -#endif // __ROM_MAP_H__ diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rtos_bindings.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rtos_bindings.h deleted file mode 100644 index 9c3df5da88..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/rtos_bindings.h +++ /dev/null @@ -1,107 +0,0 @@ -//***************************************************************************** -// -// rtos_bindings.h - Macros ulIntIDended to aid porting of StellarisWare modules -// for use with an RTOS. -// -// Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. -// Software License Agreement -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// This is part of revision 9453 of the Stellaris Peripheral Driver Library. -// -//***************************************************************************** -#ifndef RTOS_BINDINGS_H_ -#define RTOS_BINDINGS_H_ - -#ifdef USE_RTOS -//***************************************************************************** -// -// If an RTOS is in use, implement a header file called "stellaris_rtos.h" -// which contains RTOS-specific versions of each of the macros defined below -// and make sure it appears on the include path set when you build your -// project. -// -// Note that there is no default implementation of this header file included -// in StellarisWare - it is your responsibility to create it specifically for -// your RTOS. -// -//***************************************************************************** -#include "stellaris_rtos.h" - -#else -//***************************************************************************** -// -// When no RTOS is in use, the follow macros compile to either nothing or a -// minimal implementation that works in a bare-metal environment. -// -// Each of these macros must be redefined in stellaris_rtos.h if you are using -// StellarisWare under an RTOS. -// -//***************************************************************************** - -//***************************************************************************** -// -// A simple macro used to yield within polling loops. In the default, non-RTOS -// implementation, this compiles to nothing. -// -//***************************************************************************** -#define OS_YIELD() - -//***************************************************************************** -// -// A simple macro around the SysCtlDelay function. The parameter is the number -// of 3 cycle loops to wait before returning (as for SysCtlDelay). In an RTOS -// implementation, this could be replaced with an OS delay call with -// appropriate parameter scaling. -// -//***************************************************************************** -#define OS_DELAY(ul3Cycles) MAP_SysCtlDelay(ul3Cycles) - -//***************************************************************************** -// -// Wrappers around low level interrupt control functions. For information -// on each of these functions, please see the appropriate API documentation -// for the DriverLib Interrupt driver. -// -// The macros defined here represent interrupt-control functions that may be -// called from within StellarisWare code. It is expected that application -// code will use RTOS-specific functions to control interrupt priority, to -// pend interrupts and to perform runtime vector manipulation. As a result, -// no macros are defined to wrap any of these functions from interrupt.c. -// -//***************************************************************************** -#define OS_INT_MASTER_ENABLE() MAP_IntMasterEnable() -#define OS_INT_MASTER_DISABLE() MAP_IntMasterDisable() -#define OS_INT_DISABLE(ulIntID) MAP_IntDisable(ulIntID) -#define OS_INT_ENABLE(ulIntID) MAP_IntEnable(ulIntID) - -#endif // USE_RTOS - -#endif // RTOS_BINDINGS_H_ diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.c b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.c deleted file mode 100644 index 00fbd65ad4..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.c +++ /dev/null @@ -1,841 +0,0 @@ -//########################################################################### -// -// FILE: sysctl.c -// -// TITLE: Stellaris style wrapper driver for F2837x system control. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -//***************************************************************************** -// -//! \addtogroup sysctl_api -//! @{ -// -//***************************************************************************** - -#include "F28x_Project.h" -#include -#include -#include "inc/hw_types.h" -#include "driverlib/debug.h" -#include "driverlib/sysctl.h" - -//***************************************************************************** -// -//! \internal -//! Checks a peripheral identifier. -//! -//! \param ui32Peripheral is the peripheral identifier. -//! -//! This function determines if a peripheral identifier is valid. -//! -//! \return Returns \b true if the peripheral identifier is valid and \b false -//! otherwise. -// -//***************************************************************************** -#ifdef DEBUG -static bool -_SysCtlPeripheralValid(uint32_t ui32Peripheral) -{ - return((ui32Peripheral == SYSCTL_PERIPH_CLA1) || - (ui32Peripheral == SYSCTL_PERIPH_DMA) || - (ui32Peripheral == SYSCTL_PERIPH_TIMER0) || - (ui32Peripheral == SYSCTL_PERIPH_TIMER1) || - (ui32Peripheral == SYSCTL_PERIPH_TIMER2) || - (ui32Peripheral == SYSCTL_PERIPH_HRPWM) || - (ui32Peripheral == SYSCTL_PERIPH_TBCLKSYNC) || - (ui32Peripheral == SYSCTL_PERIPH_GTBCLKSYNC) || - (ui32Peripheral == SYSCTL_PERIPH_EMIF1) || - (ui32Peripheral == SYSCTL_PERIPH_EMIF2) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM1) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM2) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM3) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM4) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM5) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM6) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM7) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM8) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM9) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM10) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM11) || - (ui32Peripheral == SYSCTL_PERIPH_EPWM12) || - (ui32Peripheral == SYSCTL_PERIPH_ECAP1) || - (ui32Peripheral == SYSCTL_PERIPH_ECAP2) || - (ui32Peripheral == SYSCTL_PERIPH_ECAP3) || - (ui32Peripheral == SYSCTL_PERIPH_ECAP4) || - (ui32Peripheral == SYSCTL_PERIPH_ECAP5) || - (ui32Peripheral == SYSCTL_PERIPH_ECAP6) || - (ui32Peripheral == SYSCTL_PERIPH_EQEP1) || - (ui32Peripheral == SYSCTL_PERIPH_EQEP2) || - (ui32Peripheral == SYSCTL_PERIPH_EQEP3) || - (ui32Peripheral == SYSCTL_PERIPH_SD1) || - (ui32Peripheral == SYSCTL_PERIPH_SD2) || - (ui32Peripheral == SYSCTL_PERIPH_SCI1) || - (ui32Peripheral == SYSCTL_PERIPH_SCI2) || - (ui32Peripheral == SYSCTL_PERIPH_SCI3) || - (ui32Peripheral == SYSCTL_PERIPH_SCI4) || - (ui32Peripheral == SYSCTL_PERIPH_SPI1) || - (ui32Peripheral == SYSCTL_PERIPH_SPI2) || - (ui32Peripheral == SYSCTL_PERIPH_SPI3) || - (ui32Peripheral == SYSCTL_PERIPH_I2C1) || - (ui32Peripheral == SYSCTL_PERIPH_I2C2) || - (ui32Peripheral == SYSCTL_PERIPH_CAN1) || - (ui32Peripheral == SYSCTL_PERIPH_CAN2) || - (ui32Peripheral == SYSCTL_PERIPH_MCBSP1) || - (ui32Peripheral == SYSCTL_PERIPH_MCBSP2) || - (ui32Peripheral == SYSCTL_PERIPH_UPP1) || - (ui32Peripheral == SYSCTL_PERIPH_ADC1) || - (ui32Peripheral == SYSCTL_PERIPH_ADC2) || - (ui32Peripheral == SYSCTL_PERIPH_ADC3) || - (ui32Peripheral == SYSCTL_PERIPH_ADC4) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS1) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS2) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS3) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS4) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS5) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS6) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS7) || - (ui32Peripheral == SYSCTL_PERIPH_CMPSS8) || - (ui32Peripheral == SYSCTL_PERIPH_BUFFDAC1) || - (ui32Peripheral == SYSCTL_PERIPH_BUFFDAC2) || - (ui32Peripheral == SYSCTL_PERIPH_BUFFDAC3)); -} -#endif - - - -//***************************************************************************** -// -//! Determines if a peripheral is present. -//! -//! \param ui32Peripheral is the peripheral in question. -//! -//! This function determines if a particular peripheral is present in the -//! device. Each member of the family has a different peripheral -//! set; this function determines which peripherals are present on this device. -//! -//! \return Returns \b true if the specified peripheral is present and \b false -//! if it is not. -// -//***************************************************************************** -bool -SysCtlPeripheralPresent(uint32_t ui32Peripheral) -{ - - uint16_t regIndex; - uint16_t bitIndex; - - // - // Check the arguments. - // - ASSERT(_SysCtlPeripheralValid(ui32Peripheral)); - - - regIndex = ui32Peripheral & SYSCTL_PERIPH_REG_M; - bitIndex = (ui32Peripheral & SYSCTL_PERIPH_BIT_M) >> SYSCTL_PERIPH_BIT_S; - - if(HWREG(&(DevCfgRegs.DC0.all) + (2 * regIndex)) & (1 << bitIndex)){ - return true; - }else{ - return false; - } - - -} - -//***************************************************************************** -// -//! Determines if a peripheral is ready. -//! -//! \param ui32Peripheral is the peripheral in question. -//! -//! This function determines if a particular peripheral is ready to be -//! accessed. The peripheral may be in a non-ready state if it is not enabled, -//! is being held in reset, or is in the process of becoming ready after being -//! enabled or taken out of reset. -//! -//! \note The ability to check for a peripheral being ready varies based on the -//! part in use. Please consult the data sheet for the part you are -//! using to determine if this feature is available. -//! -//! \return Returns \b true if the specified peripheral is ready and \b false -//! if it is not. -// -//***************************************************************************** -bool -SysCtlPeripheralReady(uint32_t ui32Peripheral) -{ - - uint16_t regIndex; - uint16_t bitIndex; - - // - // Check the arguments. - // - ASSERT(_SysCtlPeripheralValid(ui32Peripheral)); - - - regIndex = ui32Peripheral & SYSCTL_PERIPH_REG_M; - bitIndex = (ui32Peripheral & SYSCTL_PERIPH_BIT_M) >> SYSCTL_PERIPH_BIT_S; - - // Is the peripheral there? - if(HWREG((uint32_t)&(DevCfgRegs.DC0.all) + (2 * regIndex)) & ((uint32_t)1 << bitIndex)){ - // Is the peripheral enabled? - if(HWREG((uint32_t)&(CpuSysRegs.PCLKCR0.all) + (2 * regIndex)) & ((uint32_t)1 << bitIndex)){ - // Is the peripheral in reset? - if((HWREG((uint32_t)&(DevCfgRegs.SOFTPRES0.all) + (2 * regIndex)) & ((uint32_t)1 << bitIndex)) == 0){ - // No? Ok cool - return true; - } - } - }else{ - return false; - } - - return false; -} -//***************************************************************************** -// -//! Resets a peripheral -//! -//! \param ui32Peripheral is the peripheral to reset. -//! -//! The f2837x devices do not have a means of resetting peripherals via -//! via software. This is a dummy function that does nothing. -//! -//! -//! \return None. -// -//***************************************************************************** -void SysCtlPeripheralReset(uint32_t ui32Peripheral) -{ - uint16_t regIndex; - uint16_t bitIndex; - - regIndex = ui32Peripheral & SYSCTL_PERIPH_REG_M; - bitIndex = (ui32Peripheral & SYSCTL_PERIPH_BIT_M) >> SYSCTL_PERIPH_BIT_S; - - EALLOW; - - HWREG((uint32_t)&(DevCfgRegs.SOFTPRES0.all) + (2 * regIndex)) |= ((uint32_t)1 << bitIndex); - asm(" nop"); - asm(" nop"); - asm(" nop"); - asm(" nop"); - HWREG((uint32_t)&(DevCfgRegs.SOFTPRES0.all) + (2 * regIndex)) &= ~((uint32_t)1 << bitIndex); - EDIS; -} - -//***************************************************************************** -// -//! Enables a peripheral. -//! -//! \param ui32Peripheral is the peripheral to enable. -//! -//! Peripherals are enabled with this function. At power-up, all peripherals -//! are disabled; they must be enabled in order to operate or respond to -//! register reads/writes. -//! -//! The \e ui32Peripheral parameter must be only one of the following values: -//! \b SYSCTL_PERIPH_UART_A, \b SYSCTL_PERIPH_UART_B, \b SYSCTL_PERIPH_UART_C, -//! \b SYSCTL_PERIPH_UART_D, \b SYSCTL_PERIPH_SPI_A, \b SYSCTL_PERIPH_SPI_B, -//! \b SYSCTL_PERIPH_SPI_C, \b SYSCTL_PERIPH_MCBSP_A, \b SYSCTL_PERIPH_MCBSP_B, -//! \b SYSCTL_PERIPH_DMA, \b SYSCTL_PERIPH_USB_A -//! -//! \return None. -// -//***************************************************************************** -void -SysCtlPeripheralEnable(uint32_t ui32Peripheral) -{ - uint16_t regIndex; - uint16_t bitIndex; - volatile uint32_t test1, test2, test3, test4; - - regIndex = (ui32Peripheral & SYSCTL_PERIPH_REG_M); - bitIndex = (ui32Peripheral & SYSCTL_PERIPH_BIT_M) >> SYSCTL_PERIPH_BIT_S; - - EALLOW; - HWREG((uint32_t)&(CpuSysRegs.PCLKCR0.all) + (2 * regIndex)) |= ((uint32_t)1 << bitIndex); - - EDIS; -} - -//***************************************************************************** -// -//! Disables a peripheral. -//! -//! \param ui32Peripheral is the peripheral to disable. -//! -//! Peripherals are disabled with this function. Once disabled, they will not -//! operate or respond to register reads/writes. -//! -//! The \e ui32Peripheral parameter must be only one of the following values: -//! \b SYSCTL_PERIPH_UART_A, \b SYSCTL_PERIPH_UART_B, \b SYSCTL_PERIPH_UART_C, -//! \b SYSCTL_PERIPH_UART_D, \b SYSCTL_PERIPH_SPI_A, \b SYSCTL_PERIPH_SPI_B, -//! \b SYSCTL_PERIPH_SPI_C, \b SYSCTL_PERIPH_MCBSP_A, \b SYSCTL_PERIPH_MCBSP_B, -//! \b SYSCTL_PERIPH_DMA, \b SYSCTL_PERIPH_USB_A -//! -//! \return None. -// -//***************************************************************************** -void -SysCtlPeripheralDisable(uint32_t ui32Peripheral) -{ - uint16_t regIndex; - uint16_t bitIndex; - - regIndex = ui32Peripheral & SYSCTL_PERIPH_REG_M; - bitIndex = (ui32Peripheral & SYSCTL_PERIPH_BIT_M) >> SYSCTL_PERIPH_BIT_S; - - EALLOW; - - HWREG((uint32_t)&(CpuSysRegs.PCLKCR0.all) + (2 * regIndex)) &= ~((uint32_t)1 << bitIndex); - - EDIS; -} - -//***************************************************************************** -// -//! Resets the device. -//! -//! This function performs a software reset of the entire device. The -//! processor and all peripherals are reset and all device registers are -//! returned to their default values (with the exception of the reset cause -//! register, which maintains its current value but has the software reset -//! bit set as well). -//! -//! \return This function does not return. -// -//***************************************************************************** -void -SysCtlReset(void) -{ - // - // Write an incorrect check value to the watchdog control register - // This will cause a device reset - // - EALLOW; - // Enable the watchdog - HWREG(&(WdRegs.WDCR.all)) = 0x0028; - // Write a bad check value - HWREG(&(WdRegs.WDCR.all)) = 0xFFFF; - EDIS; - - // - // The device should have reset, so this should never be reached. Just in - // case, loop forever. - // - while(1) - { - } -} - - -//***************************************************************************** -// -//! Provides a small delay. -//! -//! \param ulCount is the number of delay loop iterations to perform. -//! -//! This function provides a means of generating a constant length delay. It -//! is written in assembly to keep the delay consistent across tool chains, -//! avoiding the need to tune the delay based on the tool chain in use. -//! -//! The loop takes 5 cycles/loop + 9. -//! -//! \return None. -// -//***************************************************************************** -#ifdef __TI_COMPILER_VERSION__ - #if __TI_COMPILER_VERSION__ >= 15009000 - __asm(" .def _SysCtlDelay\n" - " .sect \".TI.ramfunc\"\n" - " .global _SysCtlDelay\n" - "_SysCtlDelay:\n" - " SUB ACC,#1\n" - " BF _SysCtlDelay,GEQ\n" - " LRETR\n"); - #else - __asm(" .def _SysCtlDelay\n" - " .sect \"ramfuncs\"\n" - " .global _SysCtlDelay\n" - "_SysCtlDelay:\n" - " SUB ACC,#1\n" - " BF _SysCtlDelay,GEQ\n" - " LRETR\n"); - #endif -#endif - -//***************************************************************************** -// -//! Gets the processor clock rate. -//! -//! This function determines the clock rate of the processor clock. -//! -//! \note Because of the many different clocking options available, this -//! function cannot determine the clock speed of the processor. This function -//! should be modified to return the actual clock speed of the processor in -//! your specific application. -//! -//! \return The processor clock rate. -// -//***************************************************************************** -uint32_t -SysCtlClockGet(uint32_t u32ClockIn) -{ - - if((ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL == 0) || - (ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL == 2)){ - //10MHz Internal Clock - u32ClockIn = 10000000; - } - - //If the pll is enabled calculate its effect on the clock -// if((HWREG(SYSCTL_SYSPLLCTL) & -// (SYSCTL_SYSPLLCTL_SPLLEN | SYSCTL_SYSPLLCTL_SPLLCLKEN)) == 3) - if(ClkCfgRegs.SYSPLLCTL1.bit.PLLEN && ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN) - { - //Calculate integer multiplier and fixed divide by 2 -// ulClockIn = ulClockIn * -// (HWREG(SYSCTL_SYSPLLMULT) & SYSCTL_SYSPLLMULT_SPLLIMULT_M); - u32ClockIn = u32ClockIn * ClkCfgRegs.SYSPLLMULT.bit.IMULT; - - - //Calculate fractional multiplier -// switch((HWREG(SYSCTL_SYSPLLMULT) & SYSCTL_SYSPLLMULT_SPLLFMULT_M) >> -// SYSCTL_SYSPLLMULT_SPLLFMULT_S) - switch(ClkCfgRegs.SYSPLLMULT.bit.FMULT) - { - default: - case 0: - break; - - case 1: - u32ClockIn += u32ClockIn / 4; - break; - - case 2: - u32ClockIn += u32ClockIn / 2; - break; - - case 3: - u32ClockIn += (u32ClockIn * 3) / 4; - break; - } - } - - if(ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV != 0){ - u32ClockIn /= (2 * ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV); - } - - return u32ClockIn; - -} - -//***************************************************************************** -// -//! Gets the low speed peripheral clock rate. -//! -//! This function determines the clock rate of the low speed peripherals. -//! -//! \note Because of the many different clocking options available, this -//! function cannot determine the clock speed of the processor. This function -//! should be modified to return the actual clock speed of the processor in -//! your specific application. -//! -//! \return The low speed peripheral clock rate. -// -//***************************************************************************** -uint32_t -SysCtlLowSpeedClockGet(uint32_t u32ClockIn) -{ - - // Get the main system clock - u32ClockIn = SysCtlClockGet(u32ClockIn); - - // Apply the divider to the main clock - if(ClkCfgRegs.LOSPCP.bit.LSPCLKDIV != 0){ - u32ClockIn /= (2 * ClkCfgRegs.LOSPCP.bit.LSPCLKDIV); - } - - return u32ClockIn; - -} - -//***************************************************************************** -// -//! Sets the clocking of the device. -//! -//! \param ui32Config is the required configuration of the device clocking. -//! -//! This function configures the clocking of the device. The oscillator to be -//! used, SYSPLL fractional and integer multiplier, and the system clock -//! divider are all configured with this function. -//! -//! The \e ui32Config parameter is the logical OR of four values: -//! Clock divider, Integer multiplier, Fractional multiplier, and oscillator -//! source. -//! -//! The system clock divider is chosen with using the following macro: -//! \b SYSCTL_SYSDIV(x) - "x" is an integer of value 1 or any even value -//! up to 126 -//! -//! The System PLL fractional multiplier is chosen with one of the following -//! values: -//! \b SYSCTL_FMULT_0, \b SYSCTL_FMULT_1_4, \b SYSCTL_FMULT_1_2, -//! \b SYSCTL_FMULT_3_4 -//! -//! The System PLL integer multiplier is chosen with using the following macro: -//! \b SYSCTL_IMULT(x) - "x" is an integer from 0 to 127 -//! -//! The oscillator source is chosen with one of the following values: -//! \b SYSCTL_OSCSRC_OSC2, \b SYSCTL_OSCSRC_XTAL, \b SYSCTL_OSCSRC_OSC1 -//! -//! \note The external oscillator must be enabled in order to use an external -//! clock source. Note that attempts to disable the oscillator used to clock -//! the device is prevented by the hardware. -//! -//! \return None. -// -//***************************************************************************** -void -SysCtlClockSet(uint32_t ui32Config) -{ - uint32_t clock_source = (ui32Config & SYSCTL_OSCSRC_M) >> SYSCTL_OSCSRC_S; - uint32_t imult = (ui32Config & SYSCTL_IMULT_M); - uint32_t fmult = (ui32Config & SYSCTL_FMULT_M) >> SYSCTL_FMULT_S; - uint32_t divsel = (ui32Config & SYSCTL_SYSDIV_M) >> SYSCTL_SYSDIV_S; - - if((clock_source == ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL) && - (imult == ClkCfgRegs.SYSPLLMULT.bit.IMULT) && - (fmult == ClkCfgRegs.SYSPLLMULT.bit.FMULT) && - (divsel == ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV)) - { - //everything is set as required, so just return - return; - } - - if(clock_source != ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL) - { - //Configure Oscillator - EALLOW; - switch (clock_source) - { - case ((uint32_t)SYSCTL_OSCSRC_OSC2 >> SYSCTL_OSCSRC_S): - ClkCfgRegs.CLKSRCCTL1.bit.INTOSC2OFF=0; // Turn on INTOSC2 - ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL = 0; // Clk Src = INTOSC2 - ClkCfgRegs.CLKSRCCTL1.bit.XTALOFF=1; // Turn off XTALOSC - break; - - case ((uint32_t)SYSCTL_OSCSRC_XTAL >> SYSCTL_OSCSRC_S): - ClkCfgRegs.CLKSRCCTL1.bit.XTALOFF=0; // Turn on XTALOSC - ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL = 1; // Clk Src = XTAL - break; - - case ((uint32_t)SYSCTL_OSCSRC_OSC1 >> SYSCTL_OSCSRC_S): - ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL = 2; // Clk Src = INTOSC1 - ClkCfgRegs.CLKSRCCTL1.bit.XTALOFF=1; // Turn off XTALOSC - break; - } - EDIS; - } - - EALLOW; - // first modify the PLL multipliers - if(imult != ClkCfgRegs.SYSPLLMULT.bit.IMULT || - fmult != ClkCfgRegs.SYSPLLMULT.bit.FMULT) - { - // Bypass PLL and set dividers to /1 - ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0; - ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 0; - - // Program PLL multipliers - uint32_t temp_syspllmult = ClkCfgRegs.SYSPLLMULT.all; - ClkCfgRegs.SYSPLLMULT.all = ((temp_syspllmult & ~(0x37FU)) | - ((fmult << 8U) | imult)); - - ClkCfgRegs.SYSPLLCTL1.bit.PLLEN = 1; // Enable SYSPLL - - // Wait for the SYSPLL lock - while(ClkCfgRegs.SYSPLLSTS.bit.LOCKS != 1) - { - // Uncomment to service the watchdog - //WdRegs.WDKEY.bit.WDKEY = 0x0055; - //WdRegs.WDKEY.bit.WDKEY = 0x00AA; - } - - // Write a multiplier again to ensure proper PLL initialization - // This will force the PLL to lock a second time - ClkCfgRegs.SYSPLLMULT.bit.IMULT = imult; // Setting integer multiplier - - // Wait for the SYSPLL re-lock - while(ClkCfgRegs.SYSPLLSTS.bit.LOCKS != 1) - { - // Uncomment to service the watchdog - //WdRegs.WDKEY.bit.WDKEY = 0x0055; - //WdRegs.WDKEY.bit.WDKEY = 0x00AA; - } - } - - // Set divider to produce slower output frequency to limit current increase - if(divsel != (126/2)) - { - ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = divsel + 1; - } - else - { - ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = divsel; - } - - // Enable PLLSYSCLK is fed from system PLL clock - ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 1; - - // Small 100 cycle delay - asm(" RPT #100 || NOP"); - - // Set the divider to user value - ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = divsel; - - EDIS; -} - -//***************************************************************************** -// -//! Sets the clocking of the device. -//! -//! \param ui32Config is the required configuration of the device clocking. -//! -//! This function configures the clocking of the device. The input crystal -//! frequency, oscillator to be used, use of the PLL, and the system clock -//! divider are all configured with this function. -//! -//! The \e ui32Config parameter is the logical OR of several different values, -//! many of which are grouped into sets where only one can be chosen. -//! -//! The system clock divider is chosen with one of the following values: -//! \b SYSCTL_SYSDIV_1, \b SYSCTL_SYSDIV_2, \b SYSCTL_SYSDIV_3, ... -//! \b SYSCTL_SYSDIV_64. -//! -//! The use of the PLL is chosen with either \b SYSCTL_USE_PLL or -//! \b SYSCTL_USE_OSC. -//! -//! The external crystal frequency is chosen with one of the following values: -//! \b SYSCTL_XTAL_4MHZ, \b SYSCTL_XTAL_4_09MHZ, \b SYSCTL_XTAL_4_91MHZ, -//! \b SYSCTL_XTAL_5MHZ, \b SYSCTL_XTAL_5_12MHZ, \b SYSCTL_XTAL_6MHZ, -//! \b SYSCTL_XTAL_6_14MHZ, \b SYSCTL_XTAL_7_37MHZ, \b SYSCTL_XTAL_8MHZ, -//! \b SYSCTL_XTAL_8_19MHZ, \b SYSCTL_XTAL_10MHZ, \b SYSCTL_XTAL_12MHZ, -//! \b SYSCTL_XTAL_12_2MHZ, \b SYSCTL_XTAL_13_5MHZ, \b SYSCTL_XTAL_14_3MHZ, -//! \b SYSCTL_XTAL_16MHZ, \b SYSCTL_XTAL_16_3MHZ, \b SYSCTL_XTAL_18MHZ, -//! \b SYSCTL_XTAL_20MHZ, \b SYSCTL_XTAL_24MHZ, or \b SYSCTL_XTAL_25MHz. -//! Values below \b SYSCTL_XTAL_5MHZ are not valid when the PLL is in -//! operation. -//! -//! The oscillator source is chosen with one of the following values: -//! \b SYSCTL_OSC_MAIN, \b SYSCTL_OSC_INT, \b SYSCTL_OSC_INT4, -//! \b SYSCTL_OSC_INT30, or \b SYSCTL_OSC_EXT32. \b SYSCTL_OSC_EXT32 is only -//! available on devices with the hibernate module, and then only when the -//! hibernate module has been enabled. -//! -//! The internal and main oscillators are disabled with the -//! \b SYSCTL_INT_OSC_DIS and \b SYSCTL_MAIN_OSC_DIS flags, respectively. -//! The external oscillator must be enabled in order to use an external clock -//! source. Note that attempts to disable the oscillator used to clock the -//! device is prevented by the hardware. -//! -//! To clock the system from an external source (such as an external crystal -//! oscillator), use \b SYSCTL_USE_OSC \b | \b SYSCTL_OSC_MAIN. To clock the -//! system from the main oscillator, use \b SYSCTL_USE_OSC \b | -//! \b SYSCTL_OSC_MAIN. To clock the system from the PLL, use -//! \b SYSCTL_USE_PLL \b | \b SYSCTL_OSC_MAIN, and select the appropriate -//! crystal with one of the \b SYSCTL_XTAL_xxx values. -//! -//! \note If selecting the PLL as the system clock source (that is, via -//! \b SYSCTL_USE_PLL), this function polls the PLL lock interrupt to -//! determine when the PLL has locked. If an interrupt handler for the -//! system control interrupt is in place, and it responds to and clears the -//! PLL lock interrupt, this function delays until its timeout has occurred -//! instead of completing as soon as PLL lock is achieved. -//! -//! \return None. -// -//***************************************************************************** -void -SysCtlAuxClockSet(uint32_t ui32Config) -{ - uint16_t ui16TempDivsel; - - //Bypass PLL - //Ensure the PLL is out of our clock tree - EALLOW; - ClkCfgRegs.AUXPLLCTL1.bit.PLLCLKEN = 0; - EDIS; - - __asm( " RPT #255 || NOP"); - - //Configure Oscillator - EALLOW; - switch (ui32Config & SYSCTL_OSCSRC_M) - { - default: - case SYSCTL_OSCSRC_OSC2: - ClkCfgRegs.CLKSRCCTL1.bit.INTOSC2OFF=0; // Turn on INTOSC2 - ClkCfgRegs.CLKSRCCTL2.bit.AUXOSCCLKSRCSEL = 0; // Clk Src = INTOSC2 - ClkCfgRegs.CLKSRCCTL1.bit.XTALOFF=1; // Turn off XTALOSC - break; - - case SYSCTL_OSCSRC_XTAL: - ClkCfgRegs.CLKSRCCTL1.bit.XTALOFF=0; // Turn on XTALOSC - ClkCfgRegs.CLKSRCCTL2.bit.AUXOSCCLKSRCSEL = 1; // Clk Src = XTAL - break; - - case SYSCTL_OSCSRC_OSC1: - ClkCfgRegs.CLKSRCCTL2.bit.AUXOSCCLKSRCSEL = 2; // Clk Src = INTOSC1 - ClkCfgRegs.CLKSRCCTL1.bit.XTALOFF=1; // Turn off XTALOSC - break; - - } - EDIS; - - __asm( " RPT #255 || NOP"); - - //Configure PLL if enabled - if(ui32Config & SYSCTL_PLL_ENABLE) - { - EALLOW; - //modify dividers to maximum to reduce the inrush current - //set the integer fractional multipliers in one single write - ClkCfgRegs.AUXPLLMULT.all = ((ui32Config & SYSCTL_IMULT_M) >> SYSCTL_IMULT_S) | - (((ui32Config & SYSCTL_FMULT_M) >> SYSCTL_FMULT_S) << 8); - EDIS; - - __asm( " RPT #255 || NOP"); - - //Wait for the SYSPLL lock - while(ClkCfgRegs.AUXPLLSTS.bit.LOCKS != 1) - { - // Uncomment to service the watchdog - // ServiceDog(); - } - } - - //Configure Dividers - //increase the freq. of operation in steps to avoid any VDD fluctuations - ui16TempDivsel = 3; - while(ClkCfgRegs.AUXCLKDIVSEL.bit.AUXPLLDIV != ((ui32Config & SYSCTL_SYSDIV_M) >> SYSCTL_SYSDIV_S)) - { - EALLOW; - ClkCfgRegs.AUXCLKDIVSEL.bit.AUXPLLDIV = ui16TempDivsel; - EDIS; - ui16TempDivsel -= 1; - if(ClkCfgRegs.AUXCLKDIVSEL.bit.AUXPLLDIV != ((ui32Config & SYSCTL_SYSDIV_M) >> SYSCTL_SYSDIV_S)) - { - SysCtlDelay(15); - } - } - - //Enable PLLSYSCLK is fed from system PLL clock - EALLOW; - ClkCfgRegs.AUXPLLCTL1.bit.PLLCLKEN = 1; - EDIS; -} - -//***************************************************************************** -// -//! Powers up the USB PLL. -//! -//! This function will enable the USB controller's PLL. -//! -//! \note Because every application is different, the user will likely have to -//! modify this function to ensure the PLL multiplier is set correctly to -//! achieve the 60 MHz required by the USB controller. -//! -//! \return None. -// -//***************************************************************************** -void -SysCtlUSBPLLEnable(void) -{ -// // Turn on INTOSC2 -// ClkCfgRegs.CLKSRCCTL1.bit.INTOSC2OFF=0; -// //Select INTOSC2 as USB PLL Clk In -// ClkCfgRegs.CLKSRCCTL2.bit.AUXOSCCLKSRCSEL = 0; -// // Set Aux PLL divider -// ClkCfgRegs.AUXCLKDIVSEL.bit.AUXPLLDIV = 1; -// // Set Aux PLL multiplier -// ClkCfgRegs.AUXPLLMULT.bit.IMULT = 12; -// // Set Aux PLL fractional multiplier to 0.0 -// ClkCfgRegs.AUXPLLMULT.bit.FMULT = 0; -// //Enable AUXPLL -// ClkCfgRegs.AUXPLLCTL1.bit.PLLEN = 1; -// -// //Wait for the AUXPLL lock -// while(ClkCfgRegs.AUXPLLSTS.bit.LOCKS != 1) -// { -// // Uncomment to service the watchdog -// // ServiceDog(); -// } -// // AUXPLLCLK is fed from the AUXPLL -// ClkCfgRegs.AUXPLLCTL1.bit.PLLCLKEN = 1; - -} - -//***************************************************************************** -// -//! Powers down the USB PLL. -//! -//! This function will disable the USB controller's PLL. The USB registers -//! are still accessible, but the physical layer will no longer function. -//! -//! \return None. -// -//***************************************************************************** -void -SysCtlUSBPLLDisable(void) -{ - //Disable the PLL -// ClkCfgRegs.AUXPLLCTL1.bit.PLLCLKEN = 0; -} - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.h deleted file mode 100644 index db3c9552de..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/sysctl.h +++ /dev/null @@ -1,283 +0,0 @@ -//########################################################################### -// -// FILE: sysctl.h -// -// TITLE: Stellaris style wrapper driver for F2837x system control. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __SYSCTL_H__ -#define __SYSCTL_H__ - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - - -//***************************************************************************** -// -//! \addtogroup sysctl_api -//! @{ -// -//***************************************************************************** -#include "inc/hw_types.h" -//***************************************************************************** -// -//! Defined system clock oscillator source speed. Adjust this to reflect your -//! actual clock speed. -// -//***************************************************************************** -#if defined(_LAUNCHXL_F28379D) || defined(_LAUNCHXL_F28377S) -#define SYSTEM_CLOCK_SPEED 10000000 -#else -#define SYSTEM_CLOCK_SPEED 20000000 -#endif - -//***************************************************************************** -// -// The following are values that can be passed to the SysCtlClockSet() API as -// the ui32Config parameter. -// -//***************************************************************************** -#define SYSCTL_SYSDIV_M 0x00001F80 -#define SYSCTL_SYSDIV_S 0x00000007 -// Only 1 or even values up to 126 are allowed -#define SYSCTL_SYSDIV(x) ((((x == 1) ? 0 : (x / 2)) << SYSCTL_SYSDIV_S) & SYSCTL_SYSDIV_M) - -#define SYSCTL_IMULT_M 0x0000007F -#define SYSCTL_IMULT_S 0x00000000 -#define SYSCTL_IMULT(x) (((x) << SYSCTL_IMULT_S) & SYSCTL_IMULT_M) - -#define SYSCTL_FMULT_M 0x00006000 -#define SYSCTL_FMULT_S 0x0000000D -#define SYSCTL_FMULT_0 0x00000000 -#define SYSCTL_FMULT_1_4 0x00002000 -#define SYSCTL_FMULT_1_2 0x00004000 -#define SYSCTL_FMULT_3_4 0x00006000 - -#define SYSCTL_OSCSRC_M 0x00030000 -#define SYSCTL_OSCSRC_S 0x00000010 -#define SYSCTL_OSCSRC_OSC2 0x00000000 -#define SYSCTL_OSCSRC_XTAL 0x00010000 -#define SYSCTL_OSCSRC_OSC1 0x00020000 - -#define SYSCTL_LSDIV_M 0x00700000 -#define SYSCTL_LSDIV_S 0x00000014 -// Only 1 or even values up to 14 are allowed -#define SYSCTL_LSDIV(x) (((x == 1) ? 0 : (x / 2)) << SYSCTL_LSDIV_S) & SYSCTL_LSDIV_M) - -#define SYSCTL_PLL_ENABLE 0x80000000 -#define SYSCTL_PLL_DISABLE 0x00000000 - -//***************************************************************************** -// -// The following are values that can be passed to the -// SysCtlPeripheralPresent(), SysCtlPeripheralEnable(), -// SysCtlPeripheralDisable(), and SysCtlPeripheralReset() APIs as the -// ui32Peripheral parameter. The peripherals in the fourth group (upper nibble -// is 3) can only be used with the SysCtlPeripheralPresent() API. -// -//***************************************************************************** -#define SYSCTL_PERIPH_REG_M 0x0000001F -#define SYSCTL_PERIPH_REG_S 0x00000000 - -#define SYSCTL_PERIPH_BIT_M 0x003F0000 -#define SYSCTL_PERIPH_BIT_S 0x00000010 - -//PCLKCR0 -#define SYSCTL_PERIPH_CLA1 0x00000000 -#define SYSCTL_PERIPH_DMA 0x00020000 -#define SYSCTL_PERIPH_TIMER0 0x00030000 -#define SYSCTL_PERIPH_TIMER1 0x00040000 -#define SYSCTL_PERIPH_TIMER2 0x00050000 -#define SYSCTL_PERIPH_HRPWM 0x00100000 -#define SYSCTL_PERIPH_TBCLKSYNC 0x00120000 -#define SYSCTL_PERIPH_GTBCLKSYNC 0x00130000 - -//PCLKCR1 -#define SYSCTL_PERIPH_EMIF1 0x00000001 -#define SYSCTL_PERIPH_EMIF2 0x00010001 - -//PCLKCR2 -#define SYSCTL_PERIPH_EPWM1 0x00000002 -#define SYSCTL_PERIPH_EPWM2 0x00010002 -#define SYSCTL_PERIPH_EPWM3 0x00020002 -#define SYSCTL_PERIPH_EPWM4 0x00030002 -#define SYSCTL_PERIPH_EPWM5 0x00040002 -#define SYSCTL_PERIPH_EPWM6 0x00050002 -#define SYSCTL_PERIPH_EPWM7 0x00060002 -#define SYSCTL_PERIPH_EPWM8 0x00070002 -#define SYSCTL_PERIPH_EPWM9 0x00080002 -#define SYSCTL_PERIPH_EPWM10 0x00090002 -#define SYSCTL_PERIPH_EPWM11 0x000A0002 -#define SYSCTL_PERIPH_EPWM12 0x000B0002 - -//PCLKCR3 -#define SYSCTL_PERIPH_ECAP1 0x00000003 -#define SYSCTL_PERIPH_ECAP2 0x00010003 -#define SYSCTL_PERIPH_ECAP3 0x00020003 -#define SYSCTL_PERIPH_ECAP4 0x00030003 -#define SYSCTL_PERIPH_ECAP5 0x00040003 -#define SYSCTL_PERIPH_ECAP6 0x00050003 - -//PCLKCR4 -#define SYSCTL_PERIPH_EQEP1 0x00000004 -#define SYSCTL_PERIPH_EQEP2 0x00010004 -#define SYSCTL_PERIPH_EQEP3 0x00020004 - -//PCLKCR5 -//Reserved - -//PCLKCR6 -#define SYSCTL_PERIPH_SD1 0x00000006 -#define SYSCTL_PERIPH_SD2 0x00010006 - -//PCLKCR7 -#define SYSCTL_PERIPH_SCI1 0x00000007 -#define SYSCTL_PERIPH_SCI2 0x00010007 -#define SYSCTL_PERIPH_SCI3 0x00020007 -#define SYSCTL_PERIPH_SCI4 0x00030007 - -//PCLKCR8 -#define SYSCTL_PERIPH_SPI1 0x00000008 -#define SYSCTL_PERIPH_SPI2 0x00010008 -#define SYSCTL_PERIPH_SPI3 0x00020008 - -//PCLKCR9 -#define SYSCTL_PERIPH_I2C1 0x00000009 -#define SYSCTL_PERIPH_I2C2 0x00010009 - -//PCLKCR10 -#define SYSCTL_PERIPH_CAN1 0x0000000A -#define SYSCTL_PERIPH_CAN2 0x0001000A - -//PCLKCR11 -#define SYSCTL_PERIPH_MCBSP1 0x0000000B -#define SYSCTL_PERIPH_MCBSP2 0x0001000B -#define SYSCTL_PERIPH_USB0 0x0010000B - -//PCLKCR12 -#define SYSCTL_PERIPH_UPP1 0x0000000C - -//PCLKCR13 -#define SYSCTL_PERIPH_ADC1 0x0000000D -#define SYSCTL_PERIPH_ADC2 0x0001000D -#define SYSCTL_PERIPH_ADC3 0x0002000D -#define SYSCTL_PERIPH_ADC4 0x0003000D - -//PCLKCR14 -#define SYSCTL_PERIPH_CMPSS1 0x0000000E -#define SYSCTL_PERIPH_CMPSS2 0x0001000E -#define SYSCTL_PERIPH_CMPSS3 0x0002000E -#define SYSCTL_PERIPH_CMPSS4 0x0003000E -#define SYSCTL_PERIPH_CMPSS5 0x0004000E -#define SYSCTL_PERIPH_CMPSS6 0x0005000E -#define SYSCTL_PERIPH_CMPSS7 0x0006000E -#define SYSCTL_PERIPH_CMPSS8 0x0007000E - -//PCLKCR15 -//Reserved - -//PCLKCR16 -#define SYSCTL_PERIPH_BUFFDAC1 0x00000010 -#define SYSCTL_PERIPH_BUFFDAC2 0x00010010 -#define SYSCTL_PERIPH_BUFFDAC3 0x00020010 - - -//old -//#define SYSCTL_PERIPH_UART_A 0x1 // SCI A -//#define SYSCTL_PERIPH_UART_B 0x2 // SCI B -//#define SYSCTL_PERIPH_UART_C 0x3 // SCI C -//#define SYSCTL_PERIPH_UART_D 0x4 // SCI D -// -//#define SYSCTL_PERIPH_SPI_A 0x5 // SPI A -//#define SYSCTL_PERIPH_SPI_B 0x6 // SPI B -//#define SYSCTL_PERIPH_SPI_C 0x7 // SPI C -// -//#define SYSCTL_PERIPH_MCBSP_A 0x8 // McBSP A -//#define SYSCTL_PERIPH_MCBSP_B 0x9 // McBSP B -// -//#define SYSCTL_PERIPH_DMA 0xA // DMA -// -//#define SYSCTL_PERIPH_USB0 0xB // USBA - -//***************************************************************************** -// -// Prototypes for the APIs. -// -//***************************************************************************** - -extern uint32_t SysCtlSRAMSizeGet(void); -extern uint32_t SysCtlFlashSizeGet(void); -extern void SysCtlPeripheralReset(uint32_t ui32Peripheral); -extern void SysCtlPeripheralEnable(uint32_t ui32Peripheral); -extern void SysCtlPeripheralDisable(uint32_t ui32Peripheral); -extern bool SysCtlPeripheralPresent(uint32_t ui32Peripheral); -extern void SysCtlDelay(uint32_t ulCount); -extern uint32_t SysCtlClockGet(uint32_t u32ClockIn); -extern void SysCtlClockSet(uint32_t ui32Config); -extern void SysCtlAuxClockSet(uint32_t ui32Config); -extern uint32_t SysCtlLowSpeedClockGet(uint32_t u32ClockIn); -extern void SysCtlUSBPLLEnable(void); -extern void SysCtlUSBPLLDisable(void); - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//**************************************************************************** - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -#endif // __SYSCTL_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.c b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.c deleted file mode 100644 index 971715de78..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.c +++ /dev/null @@ -1,305 +0,0 @@ -//########################################################################### -// -// FILE: systick.c -// -// TITLE: Stellaris style wrapper driver for C28x CPU Timer 0. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -//***************************************************************************** -// -//! \addtogroup systick_api -//! @{ -// -//***************************************************************************** - -#include "F28x_Project.h" -#include "inc/hw_ints.h" -#include "inc/hw_types.h" -#include "driverlib/debug.h" -#include "driverlib/interrupt.h" -#include "driverlib/systick.h" - - -//***************************************************************************** -// -//! Initializes the Timer0 Module to act as a system tick -//! -//! \return None. -// -//***************************************************************************** -void -SysTickInit(void) -{ - // CPU Timer 0 - // Initialize timer period to maximum: - CpuTimer0Regs.PRD.all = 0xFFFFFFFF; - // Initialize pre-scale counter to divide by 1 (SYSCLKOUT): - CpuTimer0Regs.TPR.all = 0; - CpuTimer0Regs.TPRH.all = 0; - // Make sure timer is stopped: - CpuTimer0Regs.TCR.bit.TSS = 1; - // Reload all counter register with period value: - CpuTimer0Regs.TCR.bit.TRB = 1; -} - -//***************************************************************************** -// -//! Enables the SysTick counter. -//! -//! This will start the SysTick counter. If an interrupt handler has been -//! registered, it will be called when the SysTick counter rolls over. -//! -//! \note Calling this function will cause the SysTick counter to (re)commence -//! counting from its current value. The counter is not automatically reloaded -//! with the period as specified in a previous call to SysTickPeriodSet(). If -//! an immediate reload is required, the \b NVIC_ST_CURRENT register must be -//! written to force this. Any write to this register clears the SysTick -//! counter to 0 and will cause a reload with the supplied period on the next -//! clock. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickEnable(void) -{ - // - // Enable SysTick. - // - CpuTimer0Regs.TCR.bit.TRB = 1; - CpuTimer0Regs.TCR.bit.TSS = 0; -} - -//***************************************************************************** -// -//! Disables the SysTick counter. -//! -//! This will stop the SysTick counter. If an interrupt handler has been -//! registered, it will no longer be called until SysTick is restarted. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickDisable(void) -{ - // - // Disable SysTick. - // - StopCpuTimer0(); -} - -//***************************************************************************** -// -//! Registers an interrupt handler for the SysTick interrupt. -//! -//! \param pfnHandler is a pointer to the function to be called when the -//! SysTick interrupt occurs. -//! -//! This sets the handler to be called when a SysTick interrupt occurs. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickIntRegister(void (*pfnHandler)(void)) -{ - // - // Register the interrupt handler, returning an error if an error occurs. - // - IntRegister(INT_TINT0, pfnHandler); - - // - // Enable the SysTick interrupt. - // - IntEnable(INT_TINT0); -} - -//***************************************************************************** -// -//! Unregisters the interrupt handler for the SysTick interrupt. -//! -//! This function will clear the handler to be called when a SysTick interrupt -//! occurs. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickIntUnregister(void) -{ - // - // Disable the SysTick interrupt. - // - IntDisable(INT_TINT0); - - // - // Unregister the interrupt handler. - // - IntUnregister(INT_TINT0); -} - -//***************************************************************************** -// -//! Enables the SysTick interrupt. -//! -//! This function will enable the SysTick interrupt, allowing it to be -//! reflected to the processor. -//! -//! \note The SysTick interrupt handler does not need to clear the SysTick -//! interrupt source as this is done automatically by NVIC when the interrupt -//! handler is called. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickIntEnable(void) -{ - // - // Enable the SysTick interrupt. - // - CpuTimer0Regs.TCR.bit.TIE = 1; - IntEnable(INT_TINT0); -} - -//***************************************************************************** -// -//! Disables the SysTick interrupt. -//! -//! This function will disable the SysTick interrupt, preventing it from being -//! reflected to the processor. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickIntDisable(void) -{ - // - // Disable the SysTick interrupt. - // - CpuTimer0Regs.TCR.bit.TIE = 0; - IntDisable(INT_TINT0); -} - -//***************************************************************************** -// -//! Sets the period of the SysTick counter. -//! -//! \param ui32Period is the number of clock ticks in each period of the SysTick -//! counter; must be between 1 and 16,777,216, inclusive. -//! -//! This function sets the rate at which the SysTick counter wraps; this -//! equates to the number of processor clocks between interrupts. -//! -//! \note Calling this function does not cause the SysTick counter to reload -//! immediately. If an immediate reload is required, the \b NVIC_ST_CURRENT -//! register must be written. Any write to this register clears the SysTick -//! counter to 0 and will cause a reload with the \e ui32Period supplied here on -//! the next clock after the SysTick is enabled. -//! -//! \return None. -// -//***************************************************************************** -void -SysTickPeriodSet(uint32_t ui32Period) -{ - // - // Check the arguments. - // - ASSERT((ui32Period > 0) && (ui32Period <= 16777216)); - - // - // Set the period of the SysTick counter. - // - CpuTimer0Regs.PRD.all = ui32Period; -} - -//***************************************************************************** -// -//! Gets the period of the SysTick counter. -//! -//! This function returns the rate at which the SysTick counter wraps; this -//! equates to the number of processor clocks between interrupts. -//! -//! \return Returns the period of the SysTick counter. -// -//***************************************************************************** -uint32_t -SysTickPeriodGet(void) -{ - // - // Return the period of the SysTick counter. - // - return(CpuTimer0Regs.PRD.all); -} - -//***************************************************************************** -// -//! Gets the current value of the SysTick counter. -//! -//! This function returns the current value of the SysTick counter; this will -//! be a value between the period - 1 and zero, inclusive. -//! -//! \return Returns the current value of the SysTick counter. -// -//***************************************************************************** -uint32_t -SysTickValueGet(void) -{ - // - // Return the current value of the SysTick counter. - // - return(CpuTimer0Regs.TIM.all); -} - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.h deleted file mode 100644 index e4b6e7bf6f..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/systick.h +++ /dev/null @@ -1,84 +0,0 @@ -//########################################################################### -// -// FILE: systick.h -// -// TITLE: Stellaris style wrapper driver for C28x CPU Timer 0. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __SYSTICK_H__ -#define __SYSTICK_H__ - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - -//***************************************************************************** -// -// Prototypes for the APIs. -// -//***************************************************************************** - extern void SysTickInit(void); - extern void SysTickEnable(void); - extern void SysTickDisable(void); - extern void SysTickIntRegister(void (*pfnHandler)(void)); - extern void SysTickIntUnregister(void); - extern void SysTickIntEnable(void); - extern void SysTickIntDisable(void); - extern void SysTickPeriodSet(uint32_t ui32Period); - extern uint32_t SysTickPeriodGet(void); - extern uint32_t SysTickValueGet(void); - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -#endif // __SYSTICK_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.c b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.c deleted file mode 100644 index 29b2454261..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.c +++ /dev/null @@ -1,1352 +0,0 @@ -//########################################################################### -// -// FILE: uart.c -// -// TITLE: Stellaris style wrapper driver for C28x SCI peripheral. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -//***************************************************************************** -// -//! \addtogroup uart_api -//! @{ -// -//***************************************************************************** - -#include -#include -#include "inc/hw_ints.h" -#include "inc/hw_memmap.h" -#include "inc/hw_types.h" -#include "inc/hw_uart.h" -#include "driverlib/debug.h" -#include "driverlib/interrupt.h" -#include "driverlib/uart.h" - - -//***************************************************************************** -// -//! \internal -//! Checks a UART base address. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function determines if a UART port base address is valid. -//! -//! \return Returns \b true if the base address is valid and \b false -//! otherwise. -// -//***************************************************************************** -#ifdef DEBUG -static bool -UARTBaseValid(uint32_t ui32Base) -{ - return((ui32Base == UARTA_BASE) || (ui32Base == UARTB_BASE) || - (ui32Base == UARTC_BASE) || (ui32Base == UARTD_BASE)); -} -#endif - -//***************************************************************************** -// -//! Sets the type of parity. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32Parity specifies the type of parity to use. -//! -//! Sets the type of parity to use for transmitting and expect when receiving. -//! The \e ui32Parity parameter must be one of \b UART_CONFIG_PAR_NONE, -//! \b UART_CONFIG_PAR_EVEN, \b UART_CONFIG_PAR_ODD, \b UART_CONFIG_PAR_ONE, -//! or \b UART_CONFIG_PAR_ZERO. The last two allow direct control of the -//! parity bit; it is always either one or zero based on the mode. -//! -//! \return None. -// -//***************************************************************************** -void -UARTParityModeSet(uint32_t ui32Base, uint32_t ui32Parity) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - ASSERT((ui32Parity == UART_CONFIG_PAR_NONE) || - (ui32Parity == UART_CONFIG_PAR_EVEN) || - (ui32Parity == UART_CONFIG_PAR_ODD) || - (ui32Parity == UART_CONFIG_PAR_ONE) || - (ui32Parity == UART_CONFIG_PAR_ZERO)); - - // - // Set the parity mode. - // - HWREGB(ui32Base + UART_O_CCR) = ((HWREGB(ui32Base + UART_O_CCR) & - ~(UART_CONFIG_PAR_MASK)) | ui32Parity); -} - -//***************************************************************************** -// -//! Gets the type of parity currently being used. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function gets the type of parity used for transmitting data and -//! expected when receiving data. -//! -//! \return Returns the current parity settings, specified as one of -//! \b UART_CONFIG_PAR_NONE, \b UART_CONFIG_PAR_EVEN, \b UART_CONFIG_PAR_ODD, -//! \b UART_CONFIG_PAR_ONE, or \b UART_CONFIG_PAR_ZERO. -// -//***************************************************************************** -uint32_t -UARTParityModeGet(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Return the current parity setting. - // - return(HWREGB(ui32Base + UART_O_CCR) & - (UART_CONFIG_PAR_MASK)); -} - -//***************************************************************************** -// -//! Sets the FIFO level at which interrupts are generated. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32TxLevel is the transmit FIFO interrupt level, specified as one of -//! \b UART_FIFO_TX1_8, \b UART_FIFO_TX2_8, \b UART_FIFO_TX4_8, -//! \b UART_FIFO_TX6_8, or \b UART_FIFO_TX7_8. -//! \param ui32RxLevel is the receive FIFO interrupt level, specified as one of -//! \b UART_FIFO_RX1_8, \b UART_FIFO_RX2_8, \b UART_FIFO_RX4_8, -//! \b UART_FIFO_RX6_8, or \b UART_FIFO_RX7_8. -//! -//! This function sets the FIFO level at which transmit and receive interrupts -//! are generated. -//! -//! \return None. -// -//***************************************************************************** -void -UARTFIFOIntLevelSet(uint32_t ui32Base, uint32_t ui32TxLevel, - uint32_t ui32RxLevel) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - ASSERT((ui32TxLevel == UART_FIFO_TX1_8) || - (ui32TxLevel == UART_FIFO_TX2_8) || - (ui32TxLevel == UART_FIFO_TX4_8) || - (ui32TxLevel == UART_FIFO_TX6_8)); - ASSERT((ui32RxLevel == UART_FIFO_RX1_8) || - (ui32RxLevel == UART_FIFO_RX2_8) || - (ui32RxLevel == UART_FIFO_RX4_8) || - (ui32RxLevel == UART_FIFO_RX6_8)); - - // - // Set the FIFO interrupt levels. - // - HWREGH(ui32Base + UART_O_FFTX) = (HWREGH(ui32Base + UART_O_FFTX)& (~UART_FFTX_TXFFIL_M)) | ui32TxLevel ; - HWREGH(ui32Base + UART_O_FFRX) = (HWREGH(ui32Base + UART_O_FFRX)& (~UART_FFRX_RXFFIL_M)) | ui32RxLevel ; -} - -//***************************************************************************** -// -//! Gets the FIFO level at which interrupts are generated. -//! -//! \param ui32Base is the base address of the UART port. -//! \param pui32TxLevel is a pointer to storage for the transmit FIFO level, -//! returned as one of \b UART_FIFO_TX1_8, \b UART_FIFO_TX2_8, -//! \b UART_FIFO_TX4_8, \b UART_FIFO_TX6_8, or \b UART_FIFO_TX7_8. -//! \param pui32RxLevel is a pointer to storage for the receive FIFO level, -//! returned as one of \b UART_FIFO_RX1_8, \b UART_FIFO_RX2_8, -//! \b UART_FIFO_RX4_8, \b UART_FIFO_RX6_8, or \b UART_FIFO_RX7_8. -//! -//! This function gets the FIFO level at which transmit and receive interrupts -//! are generated. -//! -//! \return None. -// -//***************************************************************************** -void -UARTFIFOIntLevelGet(uint32_t ui32Base, uint32_t *pui32TxLevel, - uint32_t *pui32RxLevel) -{ - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Extract the transmit and receive FIFO levels. - // - *pui32TxLevel = HWREGH(ui32Base + UART_O_FFTX) & UART_FFTX_TXFFIL_M; - *pui32RxLevel = HWREGH(ui32Base + UART_O_FFRX) & UART_FFRX_RXFFIL_M; -} - -//***************************************************************************** -// -//! Gets the FIFO level at which interrupts are generated. -//! -//! \param ui32Base is the base address of the UART port. -//! \param pui32TxLevel is a pointer to storage for the transmit FIFO level, -//! returned as one of \b UART_FIFO_TX1_8, \b UART_FIFO_TX2_8, -//! \b UART_FIFO_TX4_8, \b UART_FIFO_TX6_8, or \b UART_FIFO_TX7_8. -//! \param pui32RxLevel is a pointer to storage for the receive FIFO level, -//! returned as one of \b UART_FIFO_RX1_8, \b UART_FIFO_RX2_8, -//! \b UART_FIFO_RX4_8, \b UART_FIFO_RX6_8, or \b UART_FIFO_RX7_8. -//! -//! This function gets the FIFO level at which transmit and receive interrupts -//! are generated. -//! -//! \return None. -// -//***************************************************************************** -void -UARTFIFOLevelGet(uint32_t ui32Base, uint32_t *pui32TxLevel, - uint32_t *pui32RxLevel) -{ - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Extract the transmit and receive FIFO levels. - // - *pui32TxLevel = (HWREGH(ui32Base + UART_O_FFTX) & UART_FFTX_TXFFST_M) >> UART_FFTX_TXFFST_S; - *pui32RxLevel = (HWREGH(ui32Base + UART_O_FFRX) & UART_FFRX_RXFFST_M) >> UART_FFRX_RXFFST_S; -} - -//***************************************************************************** -// -//! Sets the configuration of a UART. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32UARTClk is the rate of the clock supplied to the UART module. -//! \param ui32Baud is the desired baud rate. -//! \param ui32Config is the data format for the port (number of data bits, -//! number of stop bits, and parity). -//! -//! This function configures the UART for operation in the specified data -//! format. The baud rate is provided in the \e ui32Baud parameter and the data -//! format in the \e ui32Config parameter. -//! -//! The \e ui32Config parameter is the logical OR of three values: the number of -//! data bits, the number of stop bits, and the parity. \b UART_CONFIG_WLEN_8, -//! \b UART_CONFIG_WLEN_7, \b UART_CONFIG_WLEN_6, and \b UART_CONFIG_WLEN_5 -//! select from eight to five data bits per byte (respectively). -//! \b UART_CONFIG_STOP_ONE and \b UART_CONFIG_STOP_TWO select one or two stop -//! bits (respectively). \b UART_CONFIG_PAR_NONE, \b UART_CONFIG_PAR_EVEN, -//! \b UART_CONFIG_PAR_ODD, \b UART_CONFIG_PAR_ONE, and \b UART_CONFIG_PAR_ZERO -//! select the parity mode (no parity bit, even parity bit, odd parity bit, -//! parity bit always one, and parity bit always zero, respectively). -//! -//! The peripheral clock will be the same as the processor clock. This will be -//! the value returned by SysCtlClockGet(), or it can be explicitly hard coded -//! if it is constant and known (to save the code/execution overhead of a call -//! to SysCtlClockGet()). -//! -//! This function replaces the original UARTConfigSet() API and performs the -//! same actions. A macro is provided in uart.h to map the original -//! API to this API. -//! -//! \return None. -// -//***************************************************************************** -//Changed for C28x -void -UARTConfigSetExpClk(uint32_t ui32Base, uint32_t ui32UARTClk, - uint32_t ui32Baud, uint32_t ui32Config) -{ - uint32_t ui32Div; - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - ASSERT(ui32Baud != 0); -// ASSERT(ui32UARTClk >= (ui32Baud * UART_CLK_DIVIDER)); - - // - // Stop the UART. - // - UARTDisable(ui32Base); - - // - // Is the required baud rate greater than the maximum rate supported? - // - if((ui32Baud * 16) > ui32UARTClk) - { - // - // Baud Rate Not supported with current clock - // - return; - } - - // - // Compute the baud rate divider. - // - ui32Div = ((ui32UARTClk / (ui32Baud * 8)) - 1); - - // - // Set the baud rate. - // - HWREGB(ui32Base + UART_O_HBAUD) = (ui32Div & 0xFF00) >> 8; - HWREGB(ui32Base + UART_O_LBAUD) = ui32Div & 0x00FF; - - // - // Set parity, data length, and number of stop bits. - // - HWREGB(ui32Base + UART_O_CCR) = ((HWREGB(ui32Base + UART_O_CCR) & - ~(UART_CONFIG_PAR_MASK | UART_CONFIG_STOP_MASK | UART_CONFIG_WLEN_MASK)) - | ui32Config); - - - // - // Start the UART. - // - UARTEnable(ui32Base); -} - -//***************************************************************************** -// -//! Gets the current configuration of a UART. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32UARTClk is the rate of the clock supplied to the UART module. -//! \param pui32Baud is a pointer to storage for the baud rate. -//! \param pui32Config is a pointer to storage for the data format. -//! -//! The baud rate and data format for the UART is determined, given an -//! explicitly provided peripheral clock (hence the ExpClk suffix). The -//! returned baud rate is the actual baud rate; it may not be the exact baud -//! rate requested or an ``official'' baud rate. The data format returned in -//! \e pui32Config is enumerated the same as the \e ui32Config parameter of -//! UARTConfigSetExpClk(). -//! -//! The peripheral clock will be the same as the processor clock. This will be -//! the value returned by SysCtlClockGet(), or it can be explicitly hard coded -//! if it is constant and known (to save the code/execution overhead of a call -//! to SysCtlClockGet()). -//! -//! This function replaces the original UARTConfigGet() API and performs the -//! same actions. A macro is provided in uart.h to map the original -//! API to this API. -//! -//! \return None. -// -//***************************************************************************** -void -UARTConfigGetExpClk(uint32_t ui32Base, uint32_t ui32UARTClk, - uint32_t *pui32Baud, uint32_t *pui32Config) -{ - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Compute the baud rate. - // - *pui32Baud = ui32UARTClk / ((1 + (HWREGB(ui32Base + UART_O_HBAUD) << 8 ) | HWREGB(ui32Base + UART_O_LBAUD)) * 8); - - // - // Get the parity, data length, and number of stop bits. - // - *pui32Config = HWREGB(ui32Base + UART_O_CCR) & - (UART_CONFIG_PAR_MASK | UART_CONFIG_STOP_MASK | UART_CONFIG_WLEN_MASK); -} - -//***************************************************************************** -// -//! Enables transmitting and receiving. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! Sets the UARTEN, TXE, and RXE bits, and enables the transmit and receive -//! FIFOs. -//! -//! \return None. -// -//***************************************************************************** -void -UARTEnable(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Enable RX, TX, and the UART. - // - HWREGB(ui32Base + UART_O_CTL1) |= (UART_CTL1_TXENA | UART_CTL1_RXENA | UART_CTL1_SWRESET); -} - -//***************************************************************************** -// -//! Disables transmitting and receiving. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! Clears the UARTEN, TXE, and RXE bits, then waits for the end of -//! transmission of the current character, and flushes the transmit FIFO. -//! -//! \return None. -// -//***************************************************************************** -void -UARTDisable(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Wait for end of TX. - // - while(!(HWREGH(ui32Base + UART_O_CTL2) & UART_CTL2_TXEMPTY)) - { - } - - // - // Disable the FIFO. - // - HWREGH(ui32Base + UART_O_FFTX) &= ~(UART_FFTX_SCIFFENA); - - // - // Disable the UART. - // - HWREGB(ui32Base + UART_O_CTL1) &= ~(UART_CTL1_TXENA | UART_CTL1_RXENA); -} - -//***************************************************************************** -// -//! Enables Loop Back Test Mode. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! Sets the SCICCR.LOOPBKENA to enable -//! -//! \return None. -// -//***************************************************************************** -void UARTsetLoopBack(uint32_t ui32Base, bool enable) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - if(enable) - { - // - // Enable LoopBack. - // - - HWREGB(ui32Base + UART_O_CCR) |= UART_CCR_LOOPBKENA; - } - else - { - // - // Disable LoopBack. - // - HWREGB(ui32Base + UART_O_CCR) &= ~UART_CCR_LOOPBKENA; - } -} - -//***************************************************************************** -// -//! Enables the transmit and receive FIFOs. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This functions enables the transmit and receive FIFOs in the UART. -//! -//! \return None. -// -//***************************************************************************** -void -UARTFIFOEnable(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Enable the FIFO. - // - HWREGH(ui32Base + UART_O_FFTX) |= UART_FFTX_SCIFFENA; -} - -//***************************************************************************** -// -//! Disables the transmit and receive FIFOs. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This functions disables the transmit and receive FIFOs in the UART. -//! -//! \return None. -// -//***************************************************************************** -void -UARTFIFODisable(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Disable the FIFO. - // - HWREGH(ui32Base + UART_O_FFTX) &= ~UART_FFTX_SCIFFENA; -} - -//***************************************************************************** -// -//! Sets the operating mode for the UART transmit interrupt. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32Mode is the operating mode for the transmit interrupt. It may be -//! \b UART_TXINT_MODE_EOT to trigger interrupts when the transmitter is idle -//! or \b UART_TXINT_MODE_FIFO to trigger based on the current transmit FIFO -//! level. -//! -//! This function allows the mode of the UART transmit interrupt to be set. By -//! default, the transmit interrupt is asserted when the FIFO level falls past -//! a threshold set via a call to UARTFIFOLevelSet(). Alternatively, if this -//! function is called with \e ui32Mode set to \b UART_TXINT_MODE_EOT, the -//! transmit interrupt will only be asserted once the transmitter is completely -//! idle - the transmit FIFO is empty and all bits, including any stop bits, -//! have cleared the transmitter. -//! -//! \return None. -// -//***************************************************************************** -void -UARTTxIntModeSet(uint32_t ui32Base, uint32_t ui32Mode) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - ASSERT((ui32Mode == UART_TXINT_MODE_EOT) || - (ui32Mode == UART_TXINT_MODE_FIFO_M)); - - // - // Set or clear the EOT bit of the UART control register as appropriate. - // - HWREGH(ui32Base + UART_O_FFTX) = ((HWREG(ui32Base + UART_O_FFTX) & ~(UART_TXINT_MODE_FIFO_M)) | ui32Mode); -} - -//***************************************************************************** -// -//! Returns the current operating mode for the UART transmit interrupt. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function returns the current operating mode for the UART transmit -//! interrupt. The return value will be \b UART_TXINT_MODE_EOT if the -//! transmit interrupt is currently set to be asserted once the transmitter is -//! completely idle - the transmit FIFO is empty and all bits, including any -//! stop bits, have cleared the transmitter. The return value will be \b -//! UART_TXINT_MODE_FIFO if the interrupt is set to be asserted based upon the -//! level of the transmit FIFO. -//! -//! \return Returns \b UART_TXINT_MODE_FIFO or \b UART_TXINT_MODE_EOT. -// -//***************************************************************************** -uint32_t -UARTTxIntModeGet(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Return the current transmit interrupt mode. - // - return(HWREGH(ui32Base + UART_O_FFTX) & UART_TXINT_MODE_FIFO_M); -} - -//***************************************************************************** -// -//! Determines if there are any characters in the receive FIFO. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function returns a flag indicating whether or not there is data -//! available in the receive FIFO. -//! -//! \return Returns \b true if there is data in the receive FIFO or \b false -//! if there is no data in the receive FIFO. -// -//***************************************************************************** -bool -UARTCharsAvail(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Return the availability of characters. - // - if(HWREGH(ui32Base + UART_O_FFTX) & UART_FFTX_SCIFFENA) - { - return(((HWREGH(ui32Base + UART_O_FFRX) & UART_FFRX_RXFFST_M) >> UART_FFRX_RXFFST_S) ? true : false); - - } - else - { - return((HWREGB(ui32Base + UART_O_RXST) & UART_RXST_RXRDY) ? true : false); - } -} - -//***************************************************************************** -// -//! Determines if there is any space in the transmit FIFO. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function returns a flag indicating whether or not there is space -//! available in the transmit FIFO. -//! -//! \return Returns \b true if there is space available in the transmit FIFO -//! or \b false if there is no space available in the transmit FIFO. -// -//***************************************************************************** -bool -UARTSpaceAvail(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Return the availability of space. - // - return((HWREGB(ui32Base + UART_O_CTL2) & UART_CTL2_TXRDY) ? true : false); - -} - -//***************************************************************************** -// -//! Receives a character from the specified port. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! Gets a character from the receive FIFO for the specified port. -//! -//! This function replaces the original UARTCharNonBlockingGet() API and -//! performs the same actions. A macro is provided in uart.h to map -//! the original API to this API. -//! -//! \return Returns the character read from the specified port, cast as a -//! \e long. A \b -1 is returned if there are no characters present in the -//! receive FIFO. The UARTCharsAvail() function should be called before -//! attempting to call this function. -// -//***************************************************************************** -int32_t -UARTCharGetNonBlocking(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // See if there are any characters in the receive FIFO. - // - if(HWREGH(ui32Base + UART_O_FFTX) & UART_FFTX_SCIFFENA) - { - if((HWREGH(ui32Base + UART_O_FFRX) & UART_FFRX_RXFFST_M) >> UART_FFRX_RXFFST_S) - { - // - // Read and return the next character. - // - return(HWREGH(ui32Base + UART_O_RXBUF) & UART_RXBUF_SAR_M); - } - else - { - // - // There are no characters, so return a failure. - // - return(-1); - } - } - else - { - if((HWREGB(ui32Base + UART_O_RXST) & UART_RXST_RXRDY)) - { - // - // Read and return the next character. - // - return(HWREGH(ui32Base + UART_O_RXBUF) & UART_RXBUF_SAR_M); - } - else - { - // - // There are no characters, so return a failure. - // - return(-1); - } - } -} - -//***************************************************************************** -// -//! Waits for a character from the specified port. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! Gets a character from the receive FIFO for the specified port. If there -//! are no characters available, this function waits until a character is -//! received before returning. -//! -//! \return Returns the character read from the specified port, cast as a -//! \e long. -// -//***************************************************************************** -int32_t -UARTCharGet(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Wait until a char is available. - // - - if(HWREGH(ui32Base + UART_O_FFTX) & UART_FFTX_SCIFFENA) - { - while(!((HWREGH(ui32Base + UART_O_FFRX) & UART_FFRX_RXFFST_M) >> UART_FFRX_RXFFST_S)) - { - } - } - else - { - while(!(HWREGH(ui32Base + UART_O_RXST) & UART_RXST_RXRDY)) - { - - } - } - // - // Now get the char. - // - return(HWREGH(ui32Base + UART_O_RXBUF) & UART_RXBUF_SAR_M); -} - -//***************************************************************************** -// -//! Sends a character to the specified port. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ucData is the character to be transmitted. -//! -//! Writes the character \e ucData to the transmit FIFO for the specified port. -//! This function does not block, so if there is no space available, then a -//! \b false is returned, and the application must retry the function later. -//! -//! This function replaces the original UARTCharNonBlockingPut() API and -//! performs the same actions. A macro is provided in uart.h to map -//! the original API to this API. -//! -//! \return Returns \b true if the character was successfully placed in the -//! transmit FIFO or \b false if there was no space available in the transmit -//! FIFO. -// -//***************************************************************************** -bool -UARTCharPutNonBlocking(uint32_t ui32Base, unsigned char ucData) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // See if there is space in the transmit FIFO. - // - if(HWREGB(ui32Base + UART_O_CTL2) & UART_CTL2_TXRDY) - { - // - // Write this character to the transmit FIFO. - // - HWREGB(ui32Base + UART_O_TXBUF) = ucData; - - // - // Success. - // - return(true); - } - else - { - // - // There is no space in the transmit FIFO, so return a failure. - // - return(false); - } -} - -//***************************************************************************** -// -//! Waits to send a character from the specified port. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ucData is the character to be transmitted. -//! -//! Sends the character \e ucData to the transmit FIFO for the specified port. -//! If there is no space available in the transmit FIFO, this function waits -//! until there is space available before returning. -//! -//! \return None. -// -//***************************************************************************** -void -UARTCharPut(uint32_t ui32Base, unsigned char ucData) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Wait until space is available. - // - while(!(HWREGH(ui32Base + UART_O_CTL2) & UART_CTL2_TXRDY)) - { - } - - // - // Send the char. - // - HWREGB(ui32Base + UART_O_TXBUF) = ucData; -} - -//***************************************************************************** -// -//! Determines whether the UART transmitter is busy or not. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! Allows the caller to determine whether all transmitted bytes have cleared -//! the transmitter hardware. If \b false is returned, the transmit FIFO is -//! empty and all bits of the last transmitted character, including all stop -//! bits, have left the hardware shift register. -//! -//! \return Returns \b true if the UART is transmitting or \b false if all -//! transmissions are complete. -// -//***************************************************************************** -bool -UARTBusy(uint32_t ui32Base) -{ - // - // Check the argument. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Determine if the UART is busy. - // - return((HWREGB(ui32Base + UART_O_CTL2) & UART_CTL2_TXEMPTY) ? false : true); -} - -//***************************************************************************** -// -//! Registers an interrupt handler for a UART RX interrupt. -//! -//! \param ui32Base is the base address of the UART port. -//! \param pfnHandler is a pointer to the function to be called when the -//! UART interrupt occurs. -//! -//! This function does the actual registering of the interrupt handler. This -//! will enable the global interrupt in the interrupt controller; specific UART -//! interrupts must be enabled via UARTIntEnable(). It is the interrupt -//! handler's responsibility to clear the interrupt source. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -UARTRXIntRegister(uint32_t ui32Base, void (*pfnHandler)(void)) -{ - uint32_t ui32Int; - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Determine the interrupt number based on the UART port. - // - ui32Int = ((ui32Base == UARTA_BASE) ? INT_SCIRXINTA : INT_SCIRXINTB ); - - // - // Register the interrupt handler. - // - IntRegister(ui32Int, pfnHandler); - - // - // Enable the UART interrupt. - // - IntEnable(ui32Int); -} - -//***************************************************************************** -// -//! Registers an interrupt handler for a UART TX interrupt. -//! -//! \param ui32Base is the base address of the UART port. -//! \param pfnHandler is a pointer to the function to be called when the -//! UART interrupt occurs. -//! -//! This function does the actual registering of the interrupt handler. This -//! will enable the global interrupt in the interrupt controller; specific UART -//! interrupts must be enabled via UARTIntEnable(). It is the interrupt -//! handler's responsibility to clear the interrupt source. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -UARTTXIntRegister(uint32_t ui32Base, void (*pfnHandler)(void)) -{ - uint32_t ui32Int; - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Determine the interrupt number based on the UART port. - // - ui32Int = ((ui32Base == UARTA_BASE) ? INT_SCITXINTA : INT_SCITXINTB ); - - // - // Register the interrupt handler. - // - IntRegister(ui32Int, pfnHandler); - - // - // Enable the UART interrupt. - // - IntEnable(ui32Int); -} - -//***************************************************************************** -// -//! Unregisters an interrupt handler for a UART RX interrupt. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function does the actual unregistering of the interrupt handler. It -//! will clear the handler to be called when a UART interrupt occurs. This -//! will also mask off the interrupt in the interrupt controller so that the -//! interrupt handler no longer is called. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -UARTRXIntUnregister(uint32_t ui32Base) -{ - uint32_t ui32Int; - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Determine the interrupt number based on the UART port. - // - ui32Int = ((ui32Base == UARTA_BASE) ? INT_SCIRXINTA : INT_SCIRXINTB ); - - // - // Disable the interrupt. - // - IntDisable(ui32Int); - - // - // Unregister the interrupt handler. - // - IntUnregister(ui32Int); -} - -//***************************************************************************** -// -//! Unregisters an interrupt handler for a UART TX interrupt. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function does the actual unregistering of the interrupt handler. It -//! will clear the handler to be called when a UART interrupt occurs. This -//! will also mask off the interrupt in the interrupt controller so that the -//! interrupt handler no longer is called. -//! -//! \sa IntRegister() for important information about registering interrupt -//! handlers. -//! -//! \return None. -// -//***************************************************************************** -void -UARTTXIntUnregister(uint32_t ui32Base) -{ - uint32_t ui32Int; - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Determine the interrupt number based on the UART port. - // - ui32Int = ((ui32Base == UARTA_BASE) ? INT_SCITXINTA : INT_SCITXINTB ); - - // - // Disable the interrupt. - // - IntDisable(ui32Int); - - // - // Unregister the interrupt handler. - // - IntUnregister(ui32Int); -} - -//***************************************************************************** -// -//! Enables individual UART interrupt sources. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be enabled. -//! -//! Enables the indicated UART interrupt sources. Only the sources that are -//! enabled can be reflected to the processor interrupt; disabled sources have -//! no effect on the processor. -//! -//! The \e ui32IntFlags parameter is the logical OR of any of the following: -//! -//! - \b UART_INT_OE - Overrun Error interrupt -//! - \b UART_INT_BE - Break Error interrupt -//! - \b UART_INT_PE - Parity Error interrupt -//! - \b UART_INT_FE - Framing Error interrupt -//! - \b UART_INT_RT - Receive Timeout interrupt -//! - \b UART_INT_TX - Transmit interrupt -//! - \b UART_INT_RX - Receive interrupt -//! - \b UART_INT_DSR - DSR interrupt -//! - \b UART_INT_DCD - DCD interrupt -//! - \b UART_INT_CTS - CTS interrupt -//! - \b UART_INT_RI - RI interrupt -//! -//! \return None. -// -//***************************************************************************** -void -UARTIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Enable the specified interrupts. - // - if(ui32IntFlags & UART_INT_RXERR) - HWREGB(ui32Base + UART_O_CTL1) |= UART_CTL1_RXERRINTENA; - - if(ui32IntFlags & UART_INT_RXRDY_BRKDT) - HWREGB(ui32Base + UART_O_CTL2) |= UART_CTL2_RXBKINTENA; - - if(ui32IntFlags & UART_INT_TXRDY) - HWREGB(ui32Base + UART_O_CTL2) |= UART_CTL2_TXINTENA; - - if(ui32IntFlags & UART_INT_TXFF) - HWREGB(ui32Base + UART_O_FFTX) |= UART_FFTX_TXFFIENA; - - if(ui32IntFlags & UART_INT_RXFF) - HWREGB(ui32Base + UART_O_FFRX) |= UART_FFRX_RXFFIENA; - - -} - -//***************************************************************************** -// -//! Disables individual UART interrupt sources. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32IntFlags is the bit mask of the interrupt sources to be disabled. -//! -//! Disables the indicated UART interrupt sources. Only the sources that are -//! enabled can be reflected to the processor interrupt; disabled sources have -//! no effect on the processor. -//! -//! The \e ui32IntFlags parameter has the same definition as the \e ui32IntFlags -//! parameter to UARTIntEnable(). -//! -//! \return None. -// -//***************************************************************************** -void -UARTIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Disable the specified interrupts. - // - if(ui32IntFlags & UART_INT_RXERR) - HWREGB(ui32Base + UART_O_CTL1) &= ~UART_CTL1_RXERRINTENA; - - if(ui32IntFlags & UART_INT_RXRDY_BRKDT) - HWREGB(ui32Base + UART_O_CTL2) &= ~UART_CTL2_RXBKINTENA; - - if(ui32IntFlags & UART_INT_TXRDY) - HWREGB(ui32Base + UART_O_CTL2) &= ~UART_CTL2_TXINTENA; - - if(ui32IntFlags & UART_INT_TXFF) - HWREGB(ui32Base + UART_O_FFTX) &= ~UART_FFTX_TXFFIENA; - - if(ui32IntFlags & UART_INT_RXFF) - HWREGB(ui32Base + UART_O_FFRX) &= ~UART_FFRX_RXFFIENA; -} - -//***************************************************************************** -// -//! Gets the current interrupt status. -//! -//! \param ui32Base is the base address of the UART port. -//! \param bMasked is \b false if the raw interrupt status is required and -//! \b true if the masked interrupt status is required. -//! -//! This returns the interrupt status for the specified UART. Either the raw -//! interrupt status or the status of interrupts that are allowed to reflect to -//! the processor can be returned. -//! -//! \return Returns the current interrupt status, enumerated as a bit field of -//! values described in UARTIntEnable(). -// -//***************************************************************************** -uint32_t -UARTIntStatus(uint32_t ui32Base, bool bMasked) -{ - - uint32_t temp = 0; - - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Return either the interrupt status or the raw interrupt status as - // requested. - // - - - if(HWREGB(ui32Base + UART_O_CTL2) & UART_CTL2_TXRDY) - temp |= UART_INT_TXRDY; - - if(HWREGB(ui32Base + UART_O_RXST) & UART_RXST_RXERROR) - temp |= UART_INT_RXERR; - - if(HWREGB(ui32Base + UART_O_RXST) & (UART_RXST_RXRDY | UART_RXST_BRKDT)) - temp |= UART_INT_RXRDY_BRKDT; - - if(HWREGB(ui32Base + UART_O_FFTX) & UART_FFTX_TXFFINT) - temp |= UART_INT_TXFF; - - if(HWREGB(ui32Base + UART_O_FFRX) & UART_FFRX_RXFFINT) - temp |= UART_INT_RXFF; - - return temp; -} - -//***************************************************************************** -// -//! Clears UART interrupt sources. -//! -//! \param ui32Base is the base address of the UART port. -//! \param ui32IntFlags is a bit mask of the interrupt sources to be cleared. -//! -//! The specified UART interrupt sources are cleared, so that they no longer -//! assert. This function must be called in the interrupt handler to keep the -//! interrupt from being recognized again immediately upon exit. -//! -//! The \e ui32IntFlags parameter has the same definition as the \e ui32IntFlags -//! parameter to UARTIntEnable(). -//! -//! \return None. -// -//***************************************************************************** -void -UARTIntClear(uint32_t ui32Base, uint32_t ui32IntFlags) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Clear the requested interrupt sources. - // - if(ui32IntFlags & (UART_INT_RXERR | UART_INT_RXRDY_BRKDT)) - { - HWREGB(ui32Base + UART_O_CTL1) &= ~UART_CTL1_SWRESET; - __asm(" nop"); - __asm(" nop"); - __asm(" nop"); - __asm(" nop"); - HWREGB(ui32Base + UART_O_CTL1) |= UART_CTL1_SWRESET; - } - - if(ui32IntFlags & UART_INT_TXFF) - HWREGB(ui32Base + UART_O_FFTX) |= UART_FFTX_TXFFINTCLR; - - if(ui32IntFlags & UART_INT_RXFF) - HWREGB(ui32Base + UART_O_FFRX) |= UART_FFRX_RXFFINTCLR; - -} - -//***************************************************************************** -// -//! Gets current receiver errors. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function returns the current state of each of the 4 receiver error -//! sources. The returned errors are equivalent to the four error bits -//! returned via the previous call to UARTCharGet() or UARTCharGetNonBlocking() -//! with the exception that the overrun error is set immediately the overrun -//! occurs rather than when a character is next read. -//! -//! \return Returns a logical OR combination of the receiver error flags, -//! \b UART_RXERROR_FRAMING, \b UART_RXERROR_PARITY, \b UART_RXERROR_BREAK -//! and \b UART_RXERROR_OVERRUN. -// -//***************************************************************************** -uint32_t -UARTRxErrorGet(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // Return the current value of the receive status register. - // - return(HWREGH(ui32Base + UART_O_RXST)); -} - -//***************************************************************************** -// -//! Clears all reported receiver errors. -//! -//! \param ui32Base is the base address of the UART port. -//! -//! This function is used to clear all receiver error conditions reported via -//! UARTRxErrorGet(). If using the overrun, framing error, parity error or -//! break interrupts, this function must be called after clearing the interrupt -//! to ensure that later errors of the same type trigger another interrupt. -//! -//! \return None. -// -//***************************************************************************** -void -UARTRxErrorClear(uint32_t ui32Base) -{ - // - // Check the arguments. - // - ASSERT(UARTBaseValid(ui32Base)); - - // - // To clear all errors a sw reset of the module is required - // - HWREGB(ui32Base + UART_O_CTL1) &= ~UART_CTL1_SWRESET; - __asm(" nop"); - __asm(" nop"); - __asm(" nop"); - __asm(" nop"); - HWREGB(ui32Base + UART_O_CTL1) |= UART_CTL1_SWRESET; -} - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.h b/bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.h deleted file mode 100644 index ed13d30ec2..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/driverlib/uart.h +++ /dev/null @@ -1,214 +0,0 @@ -//########################################################################### -// -// FILE: uart.h -// -// TITLE: Stellaris style wrapper driver for C28x SCI peripheral. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __UART_H__ -#define __UART_H__ - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - -//***************************************************************************** -// -// Values that can be passed to UARTIntEnable, UARTIntDisable, and UARTIntClear -// as the ui32IntFlags parameter, and returned from UARTIntStatus. -// -//***************************************************************************** -#define UART_INT_RXERR 0x01 -#define UART_INT_RXRDY_BRKDT 0x02 -#define UART_INT_TXRDY 0x04 -#define UART_INT_TXFF 0x08 -#define UART_INT_RXFF 0x10 - -//***************************************************************************** -// -// Values that can be passed to UARTConfigSetExpClk as the ui32Config parameter -// and returned by UARTConfigGetExpClk in the pui32Config parameter. -// Additionally, the UART_CONFIG_PAR_* subset can be passed to -// UARTParityModeSet as the ui32Parity parameter, and are returned by -// UARTParityModeGet. -// -//***************************************************************************** -#define UART_CONFIG_WLEN_MASK 0x00000007 // Mask for extracting word length -#define UART_CONFIG_WLEN_8 0x00000007 // 8 bit data -#define UART_CONFIG_WLEN_7 0x00000006 // 7 bit data -#define UART_CONFIG_WLEN_6 0x00000005 // 6 bit data -#define UART_CONFIG_WLEN_5 0x00000004 // 5 bit data -#define UART_CONFIG_STOP_MASK 0x00000080 // Mask for extracting stop bits -#define UART_CONFIG_STOP_ONE 0x00000000 // One stop bit -#define UART_CONFIG_STOP_TWO 0x00000080 // Two stop bits -#define UART_CONFIG_PAR_MASK 0x00000060 // Parity Mask -#define UART_CONFIG_PAR_NONE 0x00000000 // No parity -#define UART_CONFIG_PAR_EVEN 0x00000060 // Even parity -#define UART_CONFIG_PAR_ODD 0x00000020 // Odd parity -#define UART_CONFIG_PAR_ONE 0x00000020 // Parity bit is one -#define UART_CONFIG_PAR_ZERO 0x00000060 // Parity bit is zero - -//***************************************************************************** -// -// Values that can be passed to UARTFIFOLevelSet as the ui32TxLevel parameter and -// returned by UARTFIFOLevelGet in the pui32TxLevel. -// -//***************************************************************************** -#define UART_FIFO_TX1_8 0x00000001 // Transmit interrupt at 1/4 Full -#define UART_FIFO_TX2_8 0x00000002 // Transmit interrupt at 1/2 Full -#define UART_FIFO_TX4_8 0x00000003 // Transmit interrupt at 3/4 Full -#define UART_FIFO_TX6_8 0x00000004 // Transmit interrupt Full - -//***************************************************************************** -// -// Values that can be passed to UARTFIFOLevelSet as the ui32RxLevel parameter and -// returned by UARTFIFOLevelGet in the pui32RxLevel. -// -//***************************************************************************** -#define UART_FIFO_RX1_8 0x00000001 // Receive interrupt at 1/4 Full -#define UART_FIFO_RX2_8 0x00000002 // Receive interrupt at 1/2 Full -#define UART_FIFO_RX4_8 0x00000003 // Receive interrupt at 3/4 Full -#define UART_FIFO_RX6_8 0x00000004 // Receive interrupt at Full - -//***************************************************************************** -// -// Values that can be passed to UARTDMAEnable() and UARTDMADisable(). -// -//***************************************************************************** -#define UART_DMA_ERR_RXSTOP 0x00000004 // Stop DMA receive if UART error -#define UART_DMA_TX 0x00000002 // Enable DMA for transmit -#define UART_DMA_RX 0x00000001 // Enable DMA for receive - -//***************************************************************************** -// -// Values returned from UARTRxErrorGet(). -// -//***************************************************************************** -#define UART_RXERROR_OVERRUN 0x00000008 -#define UART_RXERROR_BREAK 0x00000020 -#define UART_RXERROR_PARITY 0x00000004 -#define UART_RXERROR_FRAMING 0x00000010 - -//***************************************************************************** -// -// Values that can be passed to UARTHandshakeOutputsSet() or returned from -// UARTHandshakeOutputGet(). -// -//***************************************************************************** -#define UART_OUTPUT_RTS 0x00000800 -#define UART_OUTPUT_DTR 0x00000400 - -//***************************************************************************** -// -// Values that can be returned from UARTHandshakeInputsGet(). -// -//***************************************************************************** -#define UART_INPUT_RI 0x00000100 -#define UART_INPUT_DCD 0x00000004 -#define UART_INPUT_DSR 0x00000002 -#define UART_INPUT_CTS 0x00000001 - -//***************************************************************************** -// -// Values that can be passed to UARTTxIntModeSet() or returned from -// UARTTxIntModeGet(). -// -//***************************************************************************** -#define UART_TXINT_MODE_FIFO_M 0x0000001F -#define UART_TXINT_MODE_EOT 0x00000000 - -//***************************************************************************** -// -// API Function prototypes -// -//***************************************************************************** -extern void UARTParityModeSet(uint32_t ui32Base, uint32_t ui32Parity); -extern uint32_t UARTParityModeGet(uint32_t ui32Base); -extern void UARTFIFOIntLevelSet(uint32_t ui32Base, uint32_t ui32TxLevel, - uint32_t ui32RxLevel); -extern void UARTFIFOIntLevelGet(uint32_t ui32Base, uint32_t *pui32TxLevel, - uint32_t *pui32RxLevel); -extern void UARTFIFOLevelGet(uint32_t ui32Base, uint32_t *pui32TxLevel, - uint32_t *pui32RxLevel); -extern void UARTConfigSetExpClk(uint32_t ui32Base, uint32_t ui32UARTClk, - uint32_t ui32Baud, uint32_t ui32Config); -extern void UARTConfigGetExpClk(uint32_t ui32Base, uint32_t ui32UARTClk, - uint32_t *pui32Baud, uint32_t *pui32Config); -extern void UARTEnable(uint32_t ui32Base); -extern void UARTDisable(uint32_t ui32Base); -extern void UARTsetLoopBack(uint32_t ui32Base, bool enable); -extern void UARTFIFOEnable(uint32_t ui32Base); -extern void UARTFIFODisable(uint32_t ui32Base); -extern bool UARTCharsAvail(uint32_t ui32Base); -extern bool UARTSpaceAvail(uint32_t ui32Base); -extern int32_t UARTCharGetNonBlocking(uint32_t ui32Base); -extern int32_t UARTCharGet(uint32_t ui32Base); -extern bool UARTCharPutNonBlocking(uint32_t ui32Base, unsigned char ucData); -extern void UARTCharPut(uint32_t ui32Base, unsigned char ucData); -extern bool UARTBusy(uint32_t ui32Base); -extern void UARTRXIntRegister(uint32_t ui32Base, void(*pfnHandler)(void)); -extern void UARTTXIntRegister(uint32_t ui32Base, void(*pfnHandler)(void)); -extern void UARTRXIntUnregister(uint32_t ui32Base); -extern void UARTTXIntUnregister(uint32_t ui32Base); -extern void UARTIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags); -extern void UARTIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags); -extern uint32_t UARTIntStatus(uint32_t ui32Base, bool bMasked); -extern void UARTIntClear(uint32_t ui32Base, uint32_t ui32IntFlags); -extern uint32_t UARTRxErrorGet(uint32_t ui32Base); -extern void UARTRxErrorClear(uint32_t ui32Base); -extern void UARTTxIntModeSet(uint32_t ui32Base, uint32_t ui32Mode); -extern uint32_t UARTTxIntModeGet(uint32_t ui32Base); - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -#endif // __UART_H__ diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_adc.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_adc.h deleted file mode 100644 index b3a09713c6..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_adc.h +++ /dev/null @@ -1,1227 +0,0 @@ -//########################################################################### -// -// FILE: hw_adc.h -// -// TITLE: Definitions for the C28x ADC registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_ADC_H__ -#define __HW_ADC_H__ - -//***************************************************************************** -// -// The following are defines for the ADC register offsets -// -//***************************************************************************** -#define ADC_O_CTL1 0x0 // ADC Control 1 Register -#define ADC_O_CTL2 0x1 // ADC Control 2 Register -#define ADC_O_BURSTCTL 0x2 // ADC Burst Control Register -#define ADC_O_INTFLG 0x3 // ADC Interrupt Flag Register -#define ADC_O_INTFLGCLR 0x4 // ADC Interrupt Flag Clear - // Register -#define ADC_O_INTOVF 0x5 // ADC Interrupt Overflow Register -#define ADC_O_INTOVFCLR 0x6 // ADC Interrupt Overflow Clear - // Register -#define ADC_O_INTSEL1N2 0x7 // ADC Interrupt 1 and 2 Selection - // Register -#define ADC_O_INTSEL3N4 0x8 // ADC Interrupt 3 and 4 Selection - // Register -#define ADC_O_SOCPRICTL 0x9 // ADC SOC Priority Control - // Register -#define ADC_O_INTSOCSEL1 0xA // ADC Interrupt SOC Selection 1 - // Register -#define ADC_O_INTSOCSEL2 0xB // ADC Interrupt SOC Selection 2 - // Register -#define ADC_O_SOCFLG1 0xC // ADC SOC Flag 1 Register -#define ADC_O_SOCFRC1 0xD // ADC SOC Force 1 Register -#define ADC_O_SOCOVF1 0xE // ADC SOC Overflow 1 Register -#define ADC_O_SOCOVFCLR1 0xF // ADC SOC Overflow Clear 1 - // Register -#define ADC_O_SOC0CTL 0x10 // ADC SOC0 Control Register -#define ADC_O_SOC1CTL 0x12 // ADC SOC1 Control Register -#define ADC_O_SOC2CTL 0x14 // ADC SOC2 Control Register -#define ADC_O_SOC3CTL 0x16 // ADC SOC3 Control Register -#define ADC_O_SOC4CTL 0x18 // ADC SOC4 Control Register -#define ADC_O_SOC5CTL 0x1A // ADC SOC5 Control Register -#define ADC_O_SOC6CTL 0x1C // ADC SOC6 Control Register -#define ADC_O_SOC7CTL 0x1E // ADC SOC7 Control Register -#define ADC_O_SOC8CTL 0x20 // ADC SOC8 Control Register -#define ADC_O_SOC9CTL 0x22 // ADC SOC9 Control Register -#define ADC_O_SOC10CTL 0x24 // ADC SOC10 Control Register -#define ADC_O_SOC11CTL 0x26 // ADC SOC11 Control Register -#define ADC_O_SOC12CTL 0x28 // ADC SOC12 Control Register -#define ADC_O_SOC13CTL 0x2A // ADC SOC13 Control Register -#define ADC_O_SOC14CTL 0x2C // ADC SOC14 Control Register -#define ADC_O_SOC15CTL 0x2E // ADC SOC15 Control Register -#define ADC_O_EVTSTAT 0x30 // ADC Event Status Register -#define ADC_O_EVTCLR 0x32 // ADC Event Clear Register -#define ADC_O_EVTSEL 0x34 // ADC Event Selection Register -#define ADC_O_EVTINTSEL 0x36 // ADC Event Interrupt Selection - // Register -#define ADC_O_COUNTER 0x39 // ADC Counter Register -#define ADC_O_REV 0x3A // ADC Revision Register -#define ADC_O_OFFTRIM 0x3B // ADC Offset Trim Register -#define ADC_O_PPB1CONFIG 0x40 // ADC PPB1 Config Register -#define ADC_O_PPB1STAMP 0x41 // ADC PPB1 Sample Delay Time - // Stamp Register -#define ADC_O_PPB1OFFCAL 0x42 // ADC PPB1 Offset Calibration - // Register -#define ADC_O_PPB1OFFREF 0x43 // ADC PPB1 Offset Reference - // Register -#define ADC_O_PPB1TRIPHI 0x44 // ADC PPB1 Trip High Register -#define ADC_O_PPB1TRIPLO 0x46 // ADC PPB1 Trip Low/Trigger Time - // Stamp Register -#define ADC_O_PPB2CONFIG 0x48 // ADC PPB2 Config Register -#define ADC_O_PPB2STAMP 0x49 // ADC PPB2 Sample Delay Time - // Stamp Register -#define ADC_O_PPB2OFFCAL 0x4A // ADC PPB2 Offset Calibration - // Register -#define ADC_O_PPB2OFFREF 0x4B // ADC PPB2 Offset Reference - // Register -#define ADC_O_PPB2TRIPHI 0x4C // ADC PPB2 Trip High Register -#define ADC_O_PPB2TRIPLO 0x4E // ADC PPB2 Trip Low/Trigger Time - // Stamp Register -#define ADC_O_PPB3CONFIG 0x50 // ADC PPB3 Config Register -#define ADC_O_PPB3STAMP 0x51 // ADC PPB3 Sample Delay Time - // Stamp Register -#define ADC_O_PPB3OFFCAL 0x52 // ADC PPB3 Offset Calibration - // Register -#define ADC_O_PPB3OFFREF 0x53 // ADC PPB3 Offset Reference - // Register -#define ADC_O_PPB3TRIPHI 0x54 // ADC PPB3 Trip High Register -#define ADC_O_PPB3TRIPLO 0x56 // ADC PPB3 Trip Low/Trigger Time - // Stamp Register -#define ADC_O_PPB4CONFIG 0x58 // ADC PPB4 Config Register -#define ADC_O_PPB4STAMP 0x59 // ADC PPB4 Sample Delay Time - // Stamp Register -#define ADC_O_PPB4OFFCAL 0x5A // ADC PPB4 Offset Calibration - // Register -#define ADC_O_PPB4OFFREF 0x5B // ADC PPB4 Offset Reference - // Register -#define ADC_O_PPB4TRIPHI 0x5C // ADC PPB4 Trip High Register -#define ADC_O_PPB4TRIPLO 0x5E // ADC PPB4 Trip Low/Trigger Time - // Stamp Register -#define ADC_O_RESULT0 0x0 // ADC Result 0 Register -#define ADC_O_RESULT1 0x1 // ADC Result 1 Register -#define ADC_O_RESULT2 0x2 // ADC Result 2 Register -#define ADC_O_RESULT3 0x3 // ADC Result 3 Register -#define ADC_O_RESULT4 0x4 // ADC Result 4 Register -#define ADC_O_RESULT5 0x5 // ADC Result 5 Register -#define ADC_O_RESULT6 0x6 // ADC Result 6 Register -#define ADC_O_RESULT7 0x7 // ADC Result 7 Register -#define ADC_O_RESULT8 0x8 // ADC Result 8 Register -#define ADC_O_RESULT9 0x9 // ADC Result 9 Register -#define ADC_O_RESULT10 0xA // ADC Result 10 Register -#define ADC_O_RESULT11 0xB // ADC Result 11 Register -#define ADC_O_RESULT12 0xC // ADC Result 12 Register -#define ADC_O_RESULT13 0xD // ADC Result 13 Register -#define ADC_O_RESULT14 0xE // ADC Result 14 Register -#define ADC_O_RESULT15 0xF // ADC Result 15 Register -#define ADC_O_PPB1RESULT 0x10 // ADC Post Processing Block 1 - // Result Register -#define ADC_O_PPB2RESULT 0x12 // ADC Post Processing Block 2 - // Result Register -#define ADC_O_PPB3RESULT 0x14 // ADC Post Processing Block 3 - // Result Register -#define ADC_O_PPB4RESULT 0x16 // ADC Post Processing Block 4 - // Result Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCCTL1 register -// -//***************************************************************************** -#define ADC_CTL1_INTPULSEPOS 0x4 // ADC Interrupt Pulse Position -#define ADC_CTL1_ADCPWDNZ 0x80 // ADC Power Down -#define ADC_CTL1_ADCBSYCHN_S 8 -#define ADC_CTL1_ADCBSYCHN_M 0xF00 // ADC Busy Channel -#define ADC_CTL1_ADCBSY 0x2000 // ADC Busy - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCCTL2 register -// -//***************************************************************************** -#define ADC_CTL2_PRESCALE_S 0 -#define ADC_CTL2_PRESCALE_M 0xF // ADC Clock Prescaler -#define ADC_CTL2_RESOLUTION 0x40 // SOC Conversion Resolution -#define ADC_CTL2_SIGNALMODE 0x80 // SOC Signaling Mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCBURSTCTL register -// -//***************************************************************************** -#define ADC_BURSTCTL_BURSTTRIGSEL_S 0 -#define ADC_BURSTCTL_BURSTTRIGSEL_M 0x3F // SOC Burst Trigger Source Select -#define ADC_BURSTCTL_BURSTSIZE_S 8 -#define ADC_BURSTCTL_BURSTSIZE_M 0xF00 // SOC Burst Size Select -#define ADC_BURSTCTL_BURSTEN 0x8000 // SOC Burst Mode Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTFLG register -// -//***************************************************************************** -#define ADC_INTFLG_ADCINT1 0x1 // ADC Interrupt 1 Flag -#define ADC_INTFLG_ADCINT2 0x2 // ADC Interrupt 2 Flag -#define ADC_INTFLG_ADCINT3 0x4 // ADC Interrupt 3 Flag -#define ADC_INTFLG_ADCINT4 0x8 // ADC Interrupt 4 Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTFLGCLR register -// -//***************************************************************************** -#define ADC_INTFLGCLR_ADCINT1 0x1 // ADC Interrupt 1 Flag Clear -#define ADC_INTFLGCLR_ADCINT2 0x2 // ADC Interrupt 2 Flag Clear -#define ADC_INTFLGCLR_ADCINT3 0x4 // ADC Interrupt 3 Flag Clear -#define ADC_INTFLGCLR_ADCINT4 0x8 // ADC Interrupt 4 Flag Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTOVF register -// -//***************************************************************************** -#define ADC_INTOVF_ADCINT1 0x1 // ADC Interrupt 1 Overflow Flags -#define ADC_INTOVF_ADCINT2 0x2 // ADC Interrupt 2 Overflow Flags -#define ADC_INTOVF_ADCINT3 0x4 // ADC Interrupt 3 Overflow Flags -#define ADC_INTOVF_ADCINT4 0x8 // ADC Interrupt 4 Overflow Flags - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTOVFCLR register -// -//***************************************************************************** -#define ADC_INTOVFCLR_ADCINT1 0x1 // ADC Interrupt 1 Overflow Clear - // Bits -#define ADC_INTOVFCLR_ADCINT2 0x2 // ADC Interrupt 2 Overflow Clear - // Bits -#define ADC_INTOVFCLR_ADCINT3 0x4 // ADC Interrupt 3 Overflow Clear - // Bits -#define ADC_INTOVFCLR_ADCINT4 0x8 // ADC Interrupt 4 Overflow Clear - // Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTSEL1N2 register -// -//***************************************************************************** -#define ADC_INTSEL1N2_INT1SEL_S 0 -#define ADC_INTSEL1N2_INT1SEL_M 0xF // ADCINT1 EOC Source Select -#define ADC_INTSEL1N2_INT1E 0x20 // ADCINT1 Interrupt Enable -#define ADC_INTSEL1N2_INT1CONT 0x40 // ADCINT1 Continuous Mode Enable -#define ADC_INTSEL1N2_INT2SEL_S 8 -#define ADC_INTSEL1N2_INT2SEL_M 0xF00 // ADCINT2 EOC Source Select -#define ADC_INTSEL1N2_INT2E 0x2000 // ADCINT2 Interrupt Enable -#define ADC_INTSEL1N2_INT2CONT 0x4000 // ADCINT2 Continuous Mode Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTSEL3N4 register -// -//***************************************************************************** -#define ADC_INTSEL3N4_INT3SEL_S 0 -#define ADC_INTSEL3N4_INT3SEL_M 0xF // ADCINT3 EOC Source Select -#define ADC_INTSEL3N4_INT3E 0x20 // ADCINT3 Interrupt Enable -#define ADC_INTSEL3N4_INT3CONT 0x40 // ADCINT3 Continuous Mode Enable -#define ADC_INTSEL3N4_INT4SEL_S 8 -#define ADC_INTSEL3N4_INT4SEL_M 0xF00 // ADCINT4 EOC Source Select -#define ADC_INTSEL3N4_INT4E 0x2000 // ADCINT4 Interrupt Enable -#define ADC_INTSEL3N4_INT4CONT 0x4000 // ADCINT4 Continuous Mode Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOCPRICTL register -// -//***************************************************************************** -#define ADC_SOCPRICTL_SOCPRIORITY_S 0 -#define ADC_SOCPRICTL_SOCPRIORITY_M 0x1F // SOC Priority -#define ADC_SOCPRICTL_RRPOINTER_S 5 -#define ADC_SOCPRICTL_RRPOINTER_M 0x3E0 // Round Robin Pointer - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTSOCSEL1 register -// -//***************************************************************************** -#define ADC_INTSOCSEL1_SOC0_S 0 -#define ADC_INTSOCSEL1_SOC0_M 0x3 // SOC0 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC1_S 2 -#define ADC_INTSOCSEL1_SOC1_M 0xC // SOC1 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC2_S 4 -#define ADC_INTSOCSEL1_SOC2_M 0x30 // SOC2 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC3_S 6 -#define ADC_INTSOCSEL1_SOC3_M 0xC0 // SOC3 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC4_S 8 -#define ADC_INTSOCSEL1_SOC4_M 0x300 // SOC4 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC5_S 10 -#define ADC_INTSOCSEL1_SOC5_M 0xC00 // SOC5 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC6_S 12 -#define ADC_INTSOCSEL1_SOC6_M 0x3000 // SOC6 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL1_SOC7_S 14 -#define ADC_INTSOCSEL1_SOC7_M 0xC000 // SOC7 ADC Interrupt Trigger - // Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCINTSOCSEL2 register -// -//***************************************************************************** -#define ADC_INTSOCSEL2_SOC8_S 0 -#define ADC_INTSOCSEL2_SOC8_M 0x3 // SOC8 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC9_S 2 -#define ADC_INTSOCSEL2_SOC9_M 0xC // SOC9 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC10_S 4 -#define ADC_INTSOCSEL2_SOC10_M 0x30 // SOC10 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC11_S 6 -#define ADC_INTSOCSEL2_SOC11_M 0xC0 // SOC11 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC12_S 8 -#define ADC_INTSOCSEL2_SOC12_M 0x300 // SOC12 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC13_S 10 -#define ADC_INTSOCSEL2_SOC13_M 0xC00 // SOC13 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC14_S 12 -#define ADC_INTSOCSEL2_SOC14_M 0x3000 // SOC14 ADC Interrupt Trigger - // Select -#define ADC_INTSOCSEL2_SOC15_S 14 -#define ADC_INTSOCSEL2_SOC15_M 0xC000 // SOC15 ADC Interrupt Trigger - // Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOCFLG1 register -// -//***************************************************************************** -#define ADC_SOCFLG1_SOC0 0x1 // SOC0 Start of Conversion Flag -#define ADC_SOCFLG1_SOC1 0x2 // SOC1 Start of Conversion Flag -#define ADC_SOCFLG1_SOC2 0x4 // SOC2 Start of Conversion Flag -#define ADC_SOCFLG1_SOC3 0x8 // SOC3 Start of Conversion Flag -#define ADC_SOCFLG1_SOC4 0x10 // SOC4 Start of Conversion Flag -#define ADC_SOCFLG1_SOC5 0x20 // SOC5 Start of Conversion Flag -#define ADC_SOCFLG1_SOC6 0x40 // SOC6 Start of Conversion Flag -#define ADC_SOCFLG1_SOC7 0x80 // SOC7 Start of Conversion Flag -#define ADC_SOCFLG1_SOC8 0x100 // SOC8 Start of Conversion Flag -#define ADC_SOCFLG1_SOC9 0x200 // SOC9 Start of Conversion Flag -#define ADC_SOCFLG1_SOC10 0x400 // SOC10 Start of Conversion Flag -#define ADC_SOCFLG1_SOC11 0x800 // SOC11 Start of Conversion Flag -#define ADC_SOCFLG1_SOC12 0x1000 // SOC12 Start of Conversion Flag -#define ADC_SOCFLG1_SOC13 0x2000 // SOC13 Start of Conversion Flag -#define ADC_SOCFLG1_SOC14 0x4000 // SOC14 Start of Conversion Flag -#define ADC_SOCFLG1_SOC15 0x8000 // SOC15 Start of Conversion Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOCFRC1 register -// -//***************************************************************************** -#define ADC_SOCFRC1_SOC0 0x1 // SOC0 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC1 0x2 // SOC1 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC2 0x4 // SOC2 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC3 0x8 // SOC3 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC4 0x10 // SOC4 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC5 0x20 // SOC5 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC6 0x40 // SOC6 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC7 0x80 // SOC7 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC8 0x100 // SOC8 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC9 0x200 // SOC9 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC10 0x400 // SOC10 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC11 0x800 // SOC11 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC12 0x1000 // SOC12 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC13 0x2000 // SOC13 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC14 0x4000 // SOC14 Force Start of Conversion - // Bit -#define ADC_SOCFRC1_SOC15 0x8000 // SOC15 Force Start of Conversion - // Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOCOVF1 register -// -//***************************************************************************** -#define ADC_SOCOVF1_SOC0 0x1 // SOC0 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC1 0x2 // SOC1 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC2 0x4 // SOC2 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC3 0x8 // SOC3 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC4 0x10 // SOC4 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC5 0x20 // SOC5 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC6 0x40 // SOC6 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC7 0x80 // SOC7 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC8 0x100 // SOC8 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC9 0x200 // SOC9 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC10 0x400 // SOC10 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC11 0x800 // SOC11 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC12 0x1000 // SOC12 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC13 0x2000 // SOC13 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC14 0x4000 // SOC14 Start of Conversion - // Overflow Flag -#define ADC_SOCOVF1_SOC15 0x8000 // SOC15 Start of Conversion - // Overflow Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOCOVFCLR1 register -// -//***************************************************************************** -#define ADC_SOCOVFCLR1_SOC0 0x1 // SOC0 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC1 0x2 // SOC1 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC2 0x4 // SOC2 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC3 0x8 // SOC3 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC4 0x10 // SOC4 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC5 0x20 // SOC5 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC6 0x40 // SOC6 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC7 0x80 // SOC7 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC8 0x100 // SOC8 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC9 0x200 // SOC9 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC10 0x400 // SOC10 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC11 0x800 // SOC11 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC12 0x1000 // SOC12 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC13 0x2000 // SOC13 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC14 0x4000 // SOC14 Clear Start of Conversion - // Overflow Bit -#define ADC_SOCOVFCLR1_SOC15 0x8000 // SOC15 Clear Start of Conversion - // Overflow Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC0CTL register -// -//***************************************************************************** -#define ADC_SOC0CTL_ACQPS_S 0 -#define ADC_SOC0CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC0CTL_CHSEL_S 15 -#define ADC_SOC0CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC0CTL_TRIGSEL_S 20 -#define ADC_SOC0CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC1CTL register -// -//***************************************************************************** -#define ADC_SOC1CTL_ACQPS_S 0 -#define ADC_SOC1CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC1CTL_CHSEL_S 15 -#define ADC_SOC1CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC1CTL_TRIGSEL_S 20 -#define ADC_SOC1CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC2CTL register -// -//***************************************************************************** -#define ADC_SOC2CTL_ACQPS_S 0 -#define ADC_SOC2CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC2CTL_CHSEL_S 15 -#define ADC_SOC2CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC2CTL_TRIGSEL_S 20 -#define ADC_SOC2CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC3CTL register -// -//***************************************************************************** -#define ADC_SOC3CTL_ACQPS_S 0 -#define ADC_SOC3CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC3CTL_CHSEL_S 15 -#define ADC_SOC3CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC3CTL_TRIGSEL_S 20 -#define ADC_SOC3CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC4CTL register -// -//***************************************************************************** -#define ADC_SOC4CTL_ACQPS_S 0 -#define ADC_SOC4CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC4CTL_CHSEL_S 15 -#define ADC_SOC4CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC4CTL_TRIGSEL_S 20 -#define ADC_SOC4CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC5CTL register -// -//***************************************************************************** -#define ADC_SOC5CTL_ACQPS_S 0 -#define ADC_SOC5CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC5CTL_CHSEL_S 15 -#define ADC_SOC5CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC5CTL_TRIGSEL_S 20 -#define ADC_SOC5CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC6CTL register -// -//***************************************************************************** -#define ADC_SOC6CTL_ACQPS_S 0 -#define ADC_SOC6CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC6CTL_CHSEL_S 15 -#define ADC_SOC6CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC6CTL_TRIGSEL_S 20 -#define ADC_SOC6CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC7CTL register -// -//***************************************************************************** -#define ADC_SOC7CTL_ACQPS_S 0 -#define ADC_SOC7CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC7CTL_CHSEL_S 15 -#define ADC_SOC7CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC7CTL_TRIGSEL_S 20 -#define ADC_SOC7CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC8CTL register -// -//***************************************************************************** -#define ADC_SOC8CTL_ACQPS_S 0 -#define ADC_SOC8CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC8CTL_CHSEL_S 15 -#define ADC_SOC8CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC8CTL_TRIGSEL_S 20 -#define ADC_SOC8CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC9CTL register -// -//***************************************************************************** -#define ADC_SOC9CTL_ACQPS_S 0 -#define ADC_SOC9CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC9CTL_CHSEL_S 15 -#define ADC_SOC9CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC9CTL_TRIGSEL_S 20 -#define ADC_SOC9CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC10CTL register -// -//***************************************************************************** -#define ADC_SOC10CTL_ACQPS_S 0 -#define ADC_SOC10CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC10CTL_CHSEL_S 15 -#define ADC_SOC10CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC10CTL_TRIGSEL_S 20 -#define ADC_SOC10CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC11CTL register -// -//***************************************************************************** -#define ADC_SOC11CTL_ACQPS_S 0 -#define ADC_SOC11CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC11CTL_CHSEL_S 15 -#define ADC_SOC11CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC11CTL_TRIGSEL_S 20 -#define ADC_SOC11CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC12CTL register -// -//***************************************************************************** -#define ADC_SOC12CTL_ACQPS_S 0 -#define ADC_SOC12CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC12CTL_CHSEL_S 15 -#define ADC_SOC12CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC12CTL_TRIGSEL_S 20 -#define ADC_SOC12CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC13CTL register -// -//***************************************************************************** -#define ADC_SOC13CTL_ACQPS_S 0 -#define ADC_SOC13CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC13CTL_CHSEL_S 15 -#define ADC_SOC13CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC13CTL_TRIGSEL_S 20 -#define ADC_SOC13CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC14CTL register -// -//***************************************************************************** -#define ADC_SOC14CTL_ACQPS_S 0 -#define ADC_SOC14CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC14CTL_CHSEL_S 15 -#define ADC_SOC14CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC14CTL_TRIGSEL_S 20 -#define ADC_SOC14CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCSOC15CTL register -// -//***************************************************************************** -#define ADC_SOC15CTL_ACQPS_S 0 -#define ADC_SOC15CTL_ACQPS_M 0x1FF // SOC Acquisition Prescale -#define ADC_SOC15CTL_CHSEL_S 15 -#define ADC_SOC15CTL_CHSEL_M 0x78000 // SOC Channel Select -#define ADC_SOC15CTL_TRIGSEL_S 20 -#define ADC_SOC15CTL_TRIGSEL_M 0x1F00000 // SOC Trigger Source Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCEVTSTAT register -// -//***************************************************************************** -#define ADC_EVTSTAT_PPB1TRIPHI 0x1 // Post Processing Block 1 Trip - // High Flag -#define ADC_EVTSTAT_PPB1TRIPLO 0x2 // Post Processing Block 1 Trip - // Low Flag -#define ADC_EVTSTAT_PPB1ZERO 0x4 // Post Processing Block 1 Zero - // Crossing Flag -#define ADC_EVTSTAT_PPB2TRIPHI 0x10 // Post Processing Block 2 Trip - // High Flag -#define ADC_EVTSTAT_PPB2TRIPLO 0x20 // Post Processing Block 2 Trip - // Low Flag -#define ADC_EVTSTAT_PPB2ZERO 0x40 // Post Processing Block 2 Zero - // Crossing Flag -#define ADC_EVTSTAT_PPB3TRIPHI 0x100 // Post Processing Block 3 Trip - // High Flag -#define ADC_EVTSTAT_PPB3TRIPLO 0x200 // Post Processing Block 3 Trip - // Low Flag -#define ADC_EVTSTAT_PPB3ZERO 0x400 // Post Processing Block 3 Zero - // Crossing Flag -#define ADC_EVTSTAT_PPB4TRIPHI 0x1000 // Post Processing Block 4 Trip - // High Flag -#define ADC_EVTSTAT_PPB4TRIPLO 0x2000 // Post Processing Block 4 Trip - // Low Flag -#define ADC_EVTSTAT_PPB4ZERO 0x4000 // Post Processing Block 4 Zero - // Crossing Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCEVTCLR register -// -//***************************************************************************** -#define ADC_EVTCLR_PPB1TRIPHI 0x1 // Post Processing Block 1 Trip - // High Clear -#define ADC_EVTCLR_PPB1TRIPLO 0x2 // Post Processing Block 1 Trip - // Low Clear -#define ADC_EVTCLR_PPB1ZERO 0x4 // Post Processing Block 1 Zero - // Crossing Clear -#define ADC_EVTCLR_PPB2TRIPHI 0x10 // Post Processing Block 2 Trip - // High Clear -#define ADC_EVTCLR_PPB2TRIPLO 0x20 // Post Processing Block 2 Trip - // Low Clear -#define ADC_EVTCLR_PPB2ZERO 0x40 // Post Processing Block 2 Zero - // Crossing Clear -#define ADC_EVTCLR_PPB3TRIPHI 0x100 // Post Processing Block 3 Trip - // High Clear -#define ADC_EVTCLR_PPB3TRIPLO 0x200 // Post Processing Block 3 Trip - // Low Clear -#define ADC_EVTCLR_PPB3ZERO 0x400 // Post Processing Block 3 Zero - // Crossing Clear -#define ADC_EVTCLR_PPB4TRIPHI 0x1000 // Post Processing Block 4 Trip - // High Clear -#define ADC_EVTCLR_PPB4TRIPLO 0x2000 // Post Processing Block 4 Trip - // Low Clear -#define ADC_EVTCLR_PPB4ZERO 0x4000 // Post Processing Block 4 Zero - // Crossing Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCEVTSEL register -// -//***************************************************************************** -#define ADC_EVTSEL_PPB1TRIPHI 0x1 // Post Processing Block 1 Trip - // High Event Enable -#define ADC_EVTSEL_PPB1TRIPLO 0x2 // Post Processing Block 1 Trip - // Low Event Enable -#define ADC_EVTSEL_PPB1ZERO 0x4 // Post Processing Block 1 Zero - // Crossing Event Enable -#define ADC_EVTSEL_PPB2TRIPHI 0x10 // Post Processing Block 2 Trip - // High Event Enable -#define ADC_EVTSEL_PPB2TRIPLO 0x20 // Post Processing Block 2 Trip - // Low Event Enable -#define ADC_EVTSEL_PPB2ZERO 0x40 // Post Processing Block 2 Zero - // Crossing Event Enable -#define ADC_EVTSEL_PPB3TRIPHI 0x100 // Post Processing Block 3 Trip - // High Event Enable -#define ADC_EVTSEL_PPB3TRIPLO 0x200 // Post Processing Block 3 Trip - // Low Event Enable -#define ADC_EVTSEL_PPB3ZERO 0x400 // Post Processing Block 3 Zero - // Crossing Event Enable -#define ADC_EVTSEL_PPB4TRIPHI 0x1000 // Post Processing Block 4 Trip - // High Event Enable -#define ADC_EVTSEL_PPB4TRIPLO 0x2000 // Post Processing Block 4 Trip - // Low Event Enable -#define ADC_EVTSEL_PPB4ZERO 0x4000 // Post Processing Block 4 Zero - // Crossing Event Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCEVTINTSEL register -// -//***************************************************************************** -#define ADC_EVTINTSEL_PPB1TRIPHI 0x1 // Post Processing Block 1 Trip - // High Interrupt Enable -#define ADC_EVTINTSEL_PPB1TRIPLO 0x2 // Post Processing Block 1 Trip - // Low Interrupt Enable -#define ADC_EVTINTSEL_PPB1ZERO 0x4 // Post Processing Block 1 Zero - // Crossing Interrupt Enable -#define ADC_EVTINTSEL_PPB2TRIPHI 0x10 // Post Processing Block 2 Trip - // High Interrupt Enable -#define ADC_EVTINTSEL_PPB2TRIPLO 0x20 // Post Processing Block 2 Trip - // Low Interrupt Enable -#define ADC_EVTINTSEL_PPB2ZERO 0x40 // Post Processing Block 2 Zero - // Crossing Interrupt Enable -#define ADC_EVTINTSEL_PPB3TRIPHI 0x100 // Post Processing Block 3 Trip - // High Interrupt Enable -#define ADC_EVTINTSEL_PPB3TRIPLO 0x200 // Post Processing Block 3 Trip - // Low Interrupt Enable -#define ADC_EVTINTSEL_PPB3ZERO 0x400 // Post Processing Block 3 Zero - // Crossing Interrupt Enable -#define ADC_EVTINTSEL_PPB4TRIPHI 0x1000 // Post Processing Block 4 Trip - // High Interrupt Enable -#define ADC_EVTINTSEL_PPB4TRIPLO 0x2000 // Post Processing Block 4 Trip - // Low Interrupt Enable -#define ADC_EVTINTSEL_PPB4ZERO 0x4000 // Post Processing Block 4 Zero - // Crossing Interrupt Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCCOUNTER register -// -//***************************************************************************** -#define ADC_COUNTER_FREECOUNT_S 0 -#define ADC_COUNTER_FREECOUNT_M 0xFFF // ADC Free Running Counter Value - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCREV register -// -//***************************************************************************** -#define ADC_REV_TYPE_S 0 -#define ADC_REV_TYPE_M 0xFF // ADC Type -#define ADC_REV_REV_S 8 -#define ADC_REV_REV_M 0xFF00 // ADC Revision - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCOFFTRIM register -// -//***************************************************************************** -#define ADC_OFFTRIM_OFFTRIM_S 0 -#define ADC_OFFTRIM_OFFTRIM_M 0xFF // ADC Offset Trim - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1CONFIG register -// -//***************************************************************************** -#define ADC_PPB1CONFIG_CONFIG_S 0 -#define ADC_PPB1CONFIG_CONFIG_M 0xF // ADC Post Processing Block - // Configuration -#define ADC_PPB1CONFIG_TWOSCOMPEN 0x10 // ADC Post Processing Block Two's - // Complement Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1STAMP register -// -//***************************************************************************** -#define ADC_PPB1STAMP_DLYSTAMP_S 0 -#define ADC_PPB1STAMP_DLYSTAMP_M 0xFFF // ADC Post Processing Block Delay - // Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1OFFCAL register -// -//***************************************************************************** -#define ADC_PPB1OFFCAL_OFFCAL_S 0 -#define ADC_PPB1OFFCAL_OFFCAL_M 0x3FF // ADC Post Processing Block - // Offset Correction - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1OFFREF register -// -//***************************************************************************** -#define ADC_PPB1OFFREF_OFFREF_S 0 -#define ADC_PPB1OFFREF_OFFREF_M 0xFFFF // ADC Post Processing Block - // Offset Reference - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1TRIPHI register -// -//***************************************************************************** -#define ADC_PPB1TRIPHI_LIMITHI_S 0 -#define ADC_PPB1TRIPHI_LIMITHI_M 0xFFFF // ADC Post Processing Block Trip - // High Limit -#define ADC_PPB1TRIPHI_HSIGN 0x10000 // High Limit Sign Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1TRIPLO register -// -//***************************************************************************** -#define ADC_PPB1TRIPLO_LIMITLO_S 0 -#define ADC_PPB1TRIPLO_LIMITLO_M 0xFFFF // ADC Post Processing Block Trip - // Low Limit -#define ADC_PPB1TRIPLO_LSIGN 0x10000 // Low Limit Sign Bit -#define ADC_PPB1TRIPLO_REQSTAMP_S 20 -#define ADC_PPB1TRIPLO_REQSTAMP_M 0xFFF00000 // ADC Post Processing Block - // Request Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2CONFIG register -// -//***************************************************************************** -#define ADC_PPB2CONFIG_CONFIG_S 0 -#define ADC_PPB2CONFIG_CONFIG_M 0xF // ADC Post Processing Block - // Configuration -#define ADC_PPB2CONFIG_TWOSCOMPEN 0x10 // ADC Post Processing Block Two's - // Complement Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2STAMP register -// -//***************************************************************************** -#define ADC_PPB2STAMP_DLYSTAMP_S 0 -#define ADC_PPB2STAMP_DLYSTAMP_M 0xFFF // ADC Post Processing Block Delay - // Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2OFFCAL register -// -//***************************************************************************** -#define ADC_PPB2OFFCAL_OFFCAL_S 0 -#define ADC_PPB2OFFCAL_OFFCAL_M 0x3FF // ADC Post Processing Block - // Offset Correction - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2OFFREF register -// -//***************************************************************************** -#define ADC_PPB2OFFREF_OFFREF_S 0 -#define ADC_PPB2OFFREF_OFFREF_M 0xFFFF // ADC Post Processing Block - // Offset Reference - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2TRIPHI register -// -//***************************************************************************** -#define ADC_PPB2TRIPHI_LIMITHI_S 0 -#define ADC_PPB2TRIPHI_LIMITHI_M 0xFFFF // ADC Post Processing Block Trip - // High Limit -#define ADC_PPB2TRIPHI_HSIGN 0x10000 // High Limit Sign Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2TRIPLO register -// -//***************************************************************************** -#define ADC_PPB2TRIPLO_LIMITLO_S 0 -#define ADC_PPB2TRIPLO_LIMITLO_M 0xFFFF // ADC Post Processing Block Trip - // Low Limit -#define ADC_PPB2TRIPLO_LSIGN 0x10000 // Low Limit Sign Bit -#define ADC_PPB2TRIPLO_REQSTAMP_S 20 -#define ADC_PPB2TRIPLO_REQSTAMP_M 0xFFF00000 // ADC Post Processing Block - // Request Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3CONFIG register -// -//***************************************************************************** -#define ADC_PPB3CONFIG_CONFIG_S 0 -#define ADC_PPB3CONFIG_CONFIG_M 0xF // ADC Post Processing Block - // Configuration -#define ADC_PPB3CONFIG_TWOSCOMPEN 0x10 // ADC Post Processing Block Two's - // Complement Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3STAMP register -// -//***************************************************************************** -#define ADC_PPB3STAMP_DLYSTAMP_S 0 -#define ADC_PPB3STAMP_DLYSTAMP_M 0xFFF // ADC Post Processing Block Delay - // Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3OFFCAL register -// -//***************************************************************************** -#define ADC_PPB3OFFCAL_OFFCAL_S 0 -#define ADC_PPB3OFFCAL_OFFCAL_M 0x3FF // ADC Post Processing Block - // Offset Correction - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3OFFREF register -// -//***************************************************************************** -#define ADC_PPB3OFFREF_OFFREF_S 0 -#define ADC_PPB3OFFREF_OFFREF_M 0xFFFF // ADC Post Processing Block - // Offset Reference - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3TRIPHI register -// -//***************************************************************************** -#define ADC_PPB3TRIPHI_LIMITHI_S 0 -#define ADC_PPB3TRIPHI_LIMITHI_M 0xFFFF // ADC Post Processing Block Trip - // High Limit -#define ADC_PPB3TRIPHI_HSIGN 0x10000 // High Limit Sign Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3TRIPLO register -// -//***************************************************************************** -#define ADC_PPB3TRIPLO_LIMITLO_S 0 -#define ADC_PPB3TRIPLO_LIMITLO_M 0xFFFF // ADC Post Processing Block Trip - // Low Limit -#define ADC_PPB3TRIPLO_LSIGN 0x10000 // Low Limit Sign Bit -#define ADC_PPB3TRIPLO_REQSTAMP_S 20 -#define ADC_PPB3TRIPLO_REQSTAMP_M 0xFFF00000 // ADC Post Processing Block - // Request Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4CONFIG register -// -//***************************************************************************** -#define ADC_PPB4CONFIG_CONFIG_S 0 -#define ADC_PPB4CONFIG_CONFIG_M 0xF // ADC Post Processing Block - // Configuration -#define ADC_PPB4CONFIG_TWOSCOMPEN 0x10 // ADC Post Processing Block Two's - // Complement Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4STAMP register -// -//***************************************************************************** -#define ADC_PPB4STAMP_DLYSTAMP_S 0 -#define ADC_PPB4STAMP_DLYSTAMP_M 0xFFF // ADC Post Processing Block Delay - // Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4OFFCAL register -// -//***************************************************************************** -#define ADC_PPB4OFFCAL_OFFCAL_S 0 -#define ADC_PPB4OFFCAL_OFFCAL_M 0x3FF // ADC Post Processing Block - // Offset Correction - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4OFFREF register -// -//***************************************************************************** -#define ADC_PPB4OFFREF_OFFREF_S 0 -#define ADC_PPB4OFFREF_OFFREF_M 0xFFFF // ADC Post Processing Block - // Offset Reference - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4TRIPHI register -// -//***************************************************************************** -#define ADC_PPB4TRIPHI_LIMITHI_S 0 -#define ADC_PPB4TRIPHI_LIMITHI_M 0xFFFF // ADC Post Processing Block Trip - // High Limit -#define ADC_PPB4TRIPHI_HSIGN 0x10000 // High Limit Sign Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4TRIPLO register -// -//***************************************************************************** -#define ADC_PPB4TRIPLO_LIMITLO_S 0 -#define ADC_PPB4TRIPLO_LIMITLO_M 0xFFFF // ADC Post Processing Block Trip - // Low Limit -#define ADC_PPB4TRIPLO_LSIGN 0x10000 // Low Limit Sign Bit -#define ADC_PPB4TRIPLO_REQSTAMP_S 20 -#define ADC_PPB4TRIPLO_REQSTAMP_M 0xFFF00000 // ADC Post Processing Block - // Request Time Stamp - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT0 register -// -//***************************************************************************** -#define ADC_RESULT0_RESULT_S 0 -#define ADC_RESULT0_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT1 register -// -//***************************************************************************** -#define ADC_RESULT1_RESULT_S 0 -#define ADC_RESULT1_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT2 register -// -//***************************************************************************** -#define ADC_RESULT2_RESULT_S 0 -#define ADC_RESULT2_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT3 register -// -//***************************************************************************** -#define ADC_RESULT3_RESULT_S 0 -#define ADC_RESULT3_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT4 register -// -//***************************************************************************** -#define ADC_RESULT4_RESULT_S 0 -#define ADC_RESULT4_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT5 register -// -//***************************************************************************** -#define ADC_RESULT5_RESULT_S 0 -#define ADC_RESULT5_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT6 register -// -//***************************************************************************** -#define ADC_RESULT6_RESULT_S 0 -#define ADC_RESULT6_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT7 register -// -//***************************************************************************** -#define ADC_RESULT7_RESULT_S 0 -#define ADC_RESULT7_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT8 register -// -//***************************************************************************** -#define ADC_RESULT8_RESULT_S 0 -#define ADC_RESULT8_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT9 register -// -//***************************************************************************** -#define ADC_RESULT9_RESULT_S 0 -#define ADC_RESULT9_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT10 register -// -//***************************************************************************** -#define ADC_RESULT10_RESULT_S 0 -#define ADC_RESULT10_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT11 register -// -//***************************************************************************** -#define ADC_RESULT11_RESULT_S 0 -#define ADC_RESULT11_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT12 register -// -//***************************************************************************** -#define ADC_RESULT12_RESULT_S 0 -#define ADC_RESULT12_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT13 register -// -//***************************************************************************** -#define ADC_RESULT13_RESULT_S 0 -#define ADC_RESULT13_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT14 register -// -//***************************************************************************** -#define ADC_RESULT14_RESULT_S 0 -#define ADC_RESULT14_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCRESULT15 register -// -//***************************************************************************** -#define ADC_RESULT15_RESULT_S 0 -#define ADC_RESULT15_RESULT_M 0xFFFF // ADC Result - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB1RESULT register -// -//***************************************************************************** -#define ADC_PPB1RESULT_PPBRESULT_S 0 -#define ADC_PPB1RESULT_PPBRESULT_M 0xFFFF // ADC Post Processing Block - // Result -#define ADC_PPB1RESULT_SIGN_S 16 -#define ADC_PPB1RESULT_SIGN_M 0xFFFF0000 // Sign Extended Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB2RESULT register -// -//***************************************************************************** -#define ADC_PPB2RESULT_PPBRESULT_S 0 -#define ADC_PPB2RESULT_PPBRESULT_M 0xFFFF // ADC Post Processing Block - // Result -#define ADC_PPB2RESULT_SIGN_S 16 -#define ADC_PPB2RESULT_SIGN_M 0xFFFF0000 // Sign Extended Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB3RESULT register -// -//***************************************************************************** -#define ADC_PPB3RESULT_PPBRESULT_S 0 -#define ADC_PPB3RESULT_PPBRESULT_M 0xFFFF // ADC Post Processing Block - // Result -#define ADC_PPB3RESULT_SIGN_S 16 -#define ADC_PPB3RESULT_SIGN_M 0xFFFF0000 // Sign Extended Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the ADCPPB4RESULT register -// -//***************************************************************************** -#define ADC_PPB4RESULT_PPBRESULT_S 0 -#define ADC_PPB4RESULT_PPBRESULT_M 0xFFFF // ADC Post Processing Block - // Result -#define ADC_PPB4RESULT_SIGN_S 16 -#define ADC_PPB4RESULT_SIGN_M 0xFFFF0000 // Sign Extended Bits -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_can.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_can.h deleted file mode 100644 index f421a0caf8..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_can.h +++ /dev/null @@ -1,612 +0,0 @@ -//########################################################################### -// -// FILE: hw_can.h -// -// TITLE: Definitions for the C28x CAN registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_CAN_H__ -#define __HW_CAN_H__ - -//***************************************************************************** -// -// The following are defines for the CAN register offsets -// -//***************************************************************************** -#define CAN_O_CTL 0x0 // CAN Control Register -#define CAN_O_ES 0x4 // Error and Status Register -#define CAN_O_ERRC 0x8 // Error Counter Register -#define CAN_O_BTR 0xC // Bit Timing Register -#define CAN_O_INT 0x10 // Interrupt Register -#define CAN_O_TEST 0x14 // Test Register -#define CAN_O_PERR 0x1C // CAN Parity Error Code Register -#define CAN_O_REL 0x20 // CAN Core Release Register -#define CAN_O_RAM_INIT 0x40 // CAN RAM Initialization Register -#define CAN_O_GLB_INT_EN 0x50 // CAN Global Interrupt Enable - // Register -#define CAN_O_GLB_INT_FLG 0x54 // CAN Global Interrupt Flag - // Register -#define CAN_O_GLB_INT_CLR 0x58 // CAN Global Interrupt Clear - // Register -#define CAN_O_ABOTR 0x80 // Auto-Bus-On Time Register -#define CAN_O_TXRQ_X 0x84 // CAN Transmission Request X - // Register -#define CAN_O_TXRQ_21 0x88 // CAN Transmission Request 2_1 - // Register -#define CAN_O_NDAT_X 0x98 // CAN New Data X Register -#define CAN_O_NDAT_21 0x9C // CAN New Data 2_1 Register -#define CAN_O_IPEN_X 0xAC // CAN Interrupt Pending X - // Register -#define CAN_O_IPEN_21 0xB0 // CAN Interrupt Pending 2_1 - // Register -#define CAN_O_MVAL_X 0xC0 // CAN Message Valid X Register -#define CAN_O_MVAL_21 0xC4 // CAN Message Valid 2_1 Register -#define CAN_O_IP_MUX21 0xD8 // CAN Interrupt Multiplexer 2_1 - // Register -#define CAN_O_IF1CMD 0x100 // IF1 Command Register -#define CAN_O_IF1MSK 0x104 // IF1 Mask Register -#define CAN_O_IF1ARB 0x108 // IF1 Arbitration Register -#define CAN_O_IF1MCTL 0x10C // IF1 Message Control Register -#define CAN_O_IF1DATA 0x110 // IF1 Data A Register -#define CAN_O_IF1DATB 0x114 // IF1 Data B Register -#define CAN_O_IF2CMD 0x120 // IF2 Command Register -#define CAN_O_IF2MSK 0x124 // IF2 Mask Register -#define CAN_O_IF2ARB 0x128 // IF2 Arbitration Register -#define CAN_O_IF2MCTL 0x12C // IF2 Message Control Register -#define CAN_O_IF2DATA 0x130 // IF2 Data A Register -#define CAN_O_IF2DATB 0x134 // IF2 Data B Register -#define CAN_O_IF3OBS 0x140 // IF3 Observation Register -#define CAN_O_IF3MSK 0x144 // IF3 Mask Register -#define CAN_O_IF3ARB 0x148 // IF3 Arbitration Register -#define CAN_O_IF3MCTL 0x14C // IF3 Message Control Register -#define CAN_O_IF3DATA 0x150 // IF3 Data A Register -#define CAN_O_IF3DATB 0x154 // IF3 Data B Register -#define CAN_O_IF3UPD 0x160 // IF3 Update Enable Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_CTL register -// -//***************************************************************************** -#define CAN_CTL_INIT 0x1 // Initialization -#define CAN_CTL_IE0 0x2 // Interrupt line 0 Enable - // Disabled -#define CAN_CTL_SIE 0x4 // Status Change Interrupt Enable - // Disabled -#define CAN_CTL_EIE 0x8 // Error Interrupt Enable Disabled -#define CAN_CTL_DAR 0x20 // Disable Automatic - // Retransmission -#define CAN_CTL_CCE 0x40 // Configuration Change Enable -#define CAN_CTL_TEST 0x80 // Test Mode Enable -#define CAN_CTL_IDS 0x100 // Interruption Debug Support - // Enable -#define CAN_CTL_ABO 0x200 // Auto-Bus-On Enable -#define CAN_CTL_PMD_S 10 -#define CAN_CTL_PMD_M 0x3C00 // Parity on/off -#define CAN_CTL_SWR 0x8000 // SW Reset Enable -#define CAN_CTL_INITDBG 0x10000 // Debug Mode Status -#define CAN_CTL_IE1 0x20000 // Interrupt line 1 Enable - // Disabled -#define CAN_CTL_PDR 0x1000000 // Power Down Request Mode -#define CAN_CTL_WUBA 0x2000000 // Wake Up on Bus Activity - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_ES register -// -//***************************************************************************** -#define CAN_ES_LEC_S 0 -#define CAN_ES_LEC_M 0x7 // Last Error Code -#define CAN_ES_TXOK 0x8 // Transmission status -#define CAN_ES_RXOK 0x10 // Reception status -#define CAN_ES_EPASS 0x20 // Error Passive State -#define CAN_ES_EWARN 0x40 // Warning State -#define CAN_ES_BOFF 0x80 // Bus-Off State -#define CAN_ES_PER 0x100 // Parity Error Detected -#define CAN_ES_WAKEUPPND 0x200 // Wake Up Pending -#define CAN_ES_PDA 0x400 // Power down mode acknowledge - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_ERRC register -// -//***************************************************************************** -#define CAN_ERRC_TEC_S 0 -#define CAN_ERRC_TEC_M 0xFF // Transmit Error Counter -#define CAN_ERRC_REC_S 8 -#define CAN_ERRC_REC_M 0x7F00 // Receive Error Counter -#define CAN_ERRC_RP 0x8000 // Receive Error Passive - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_BTR register -// -//***************************************************************************** -#define CAN_BTR_BRP_S 0 -#define CAN_BTR_BRP_M 0x3F // Baud Rate Prescaler -#define CAN_BTR_SJW_S 6 -#define CAN_BTR_SJW_M 0xC0 // Synchronization Jump Width -#define CAN_BTR_TSEG1_S 8 -#define CAN_BTR_TSEG1_M 0xF00 // Time segment -#define CAN_BTR_TSEG2_S 12 -#define CAN_BTR_TSEG2_M 0x7000 // Time segment -#define CAN_BTR_BRPE_S 16 -#define CAN_BTR_BRPE_M 0xF0000 // Baud Rate Prescaler Extension - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_INT register -// -//***************************************************************************** -#define CAN_INT_INT0ID_S 0 -#define CAN_INT_INT0ID_M 0xFFFF // Interrupt Identifier -#define CAN_INT_INT1ID_S 16 -#define CAN_INT_INT1ID_M 0xFF0000 // Interrupt 1 Identifier - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_TEST register -// -//***************************************************************************** -#define CAN_TEST_SILENT 0x8 // Silent Mode -#define CAN_TEST_LBACK 0x10 // Loopback Mode -#define CAN_TEST_TX_S 5 -#define CAN_TEST_TX_M 0x60 // CANTX Pin Control -#define CAN_TEST_RX 0x80 // CANRX Pin Status -#define CAN_TEST_EXL 0x100 // External Loopback Mode -#define CAN_TEST_RDA 0x200 // RAM Direct Access Enable: - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_PERR register -// -//***************************************************************************** -#define CAN_PERR_MSG_NUM_S 0 -#define CAN_PERR_MSG_NUM_M 0xFF // Message Number -#define CAN_PERR_WORD_NUM_S 8 -#define CAN_PERR_WORD_NUM_M 0x700 // Word Number - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_REL register -// -//***************************************************************************** -#define CAN_REL_DAY_S 0 -#define CAN_REL_DAY_M 0xFF // Day -#define CAN_REL_MON_S 8 -#define CAN_REL_MON_M 0xFF00 // Month -#define CAN_REL_YEAR_S 16 -#define CAN_REL_YEAR_M 0xF0000 // Year -#define CAN_REL_SUBSTEP_S 20 -#define CAN_REL_SUBSTEP_M 0xF00000 // Substep -#define CAN_REL_STEP_S 24 -#define CAN_REL_STEP_M 0xF000000 // Step -#define CAN_REL_REL_S 28 -#define CAN_REL_REL_M 0xF0000000 // Release - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_RAM_INIT register -// -//***************************************************************************** -#define CAN_RAM_INIT_KEY0 0x1 // KEY0 -#define CAN_RAM_INIT_KEY1 0x2 // KEY1 -#define CAN_RAM_INIT_KEY2 0x4 // KEY2 -#define CAN_RAM_INIT_KEY3 0x8 // KEY3 -#define CAN_RAM_INIT_CAN_RAM_INIT 0x10 // Initialize CAN Mailbox RAM -#define CAN_RAM_INIT_RAM_INIT_DONE 0x20 // CAN RAM initialization complete - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_GLB_INT_EN register -// -//***************************************************************************** -#define CAN_GLB_INT_CANINT0 0x1 // Global Interrupt Enable for CAN INT0 -#define CAN_GLB_INT_CANINT1 0x2 // Global Interrupt Enable for CAN INT1 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_GLB_INT_FLG register -// -//***************************************************************************** -#define CAN_GLB_INT_FLG_NAME 0x1 // Global Interrupt Flag for CAN - // INT0 -#define CAN_GLB_INT_FLG_INT1_FLG 0x2 // Global Interrupt Flag for CAN - // INT1 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_GLB_INT_CLR register -// -//***************************************************************************** -#define CAN_GLB_INT_CLR_INT0_FLG_CLR 0x1 // Global Interrupt flag clear for - // CAN INT0 -#define CAN_GLB_INT_CLR_INT1_FLG_CLR 0x2 // Global Interrupt flag clear - // for CAN INT1 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_ABOTR register -// -//***************************************************************************** -#define CAN_ABOTR_ABO_TIME_S 0 -#define CAN_ABOTR_ABO_TIME_M 0xFFFFFFFF // Auto-Bus-On Timer - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_TXRQ_X register -// -//***************************************************************************** -#define CAN_TXRQ_X_TXRQSTREG1_S 0 -#define CAN_TXRQ_X_TXRQSTREG1_M 0x3 // Transmit Request Register 1 -#define CAN_TXRQ_X_TXRQSTREG2_S 2 -#define CAN_TXRQ_X_TXRQSTREG2_M 0xC // Transmit Request Register 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_TXRQ_21 register -// -//***************************************************************************** -#define CAN_TXRQ_21_TXRQST_S 0 -#define CAN_TXRQ_21_TXRQST_M 0xFFFFFFFF // Transmission Request Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_NDAT_X register -// -//***************************************************************************** -#define CAN_NDAT_X_NEWDATREG1_S 0 -#define CAN_NDAT_X_NEWDATREG1_M 0x3 // New Data Register 1 -#define CAN_NDAT_X_NEWDATREG2_S 2 -#define CAN_NDAT_X_NEWDATREG2_M 0xC // New Data Register 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_NDAT_21 register -// -//***************************************************************************** -#define CAN_NDAT_21_NEWDAT_S 0 -#define CAN_NDAT_21_NEWDAT_M 0xFFFFFFFF // New Data Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IPEN_X register -// -//***************************************************************************** -#define CAN_IPEN_X_INTPNDREG1_S 0 -#define CAN_IPEN_X_INTPNDREG1_M 0x3 // Interrupt Pending Register 1 -#define CAN_IPEN_X_INTPNDREG2_S 2 -#define CAN_IPEN_X_INTPNDREG2_M 0xC // Interrupt Pending Register 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IPEN_21 register -// -//***************************************************************************** -#define CAN_IPEN_21_INTPND_S 0 -#define CAN_IPEN_21_INTPND_M 0xFFFFFFFF // Interrupt Pending - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_MVAL_X register -// -//***************************************************************************** -#define CAN_MVAL_X_MSGVALREG1_S 0 -#define CAN_MVAL_X_MSGVALREG1_M 0x3 // Message Valid Register 1 -#define CAN_MVAL_X_MSGVALREG2_S 2 -#define CAN_MVAL_X_MSGVALREG2_M 0xC // Message Valid Register 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_MVAL_21 register -// -//***************************************************************************** -#define CAN_MVAL_21_MSGVALREG_S 0 -#define CAN_MVAL_21_MSGVALREG_M 0xFFFFFFFF // Message Valid Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IP_MUX21 register -// -//***************************************************************************** -#define CAN_IP_MUX21_INTMUX_S 0 -#define CAN_IP_MUX21_INTMUX_M 0xFFFFFFFF // Interrupt Mux - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF1CMD register -// -//***************************************************************************** -#define CAN_IF1CMD_MSG_NUM_S 0 -#define CAN_IF1CMD_MSG_NUM_M 0xFF // Message Number -#define CAN_IF1CMD_BUSY 0x8000 // Busy Flag -#define CAN_IF1CMD_DATA_B 0x10000 // Access Data Bytes 4-7 -#define CAN_IF1CMD_DATA_A 0x20000 // Access Data Bytes 0-3 -#define CAN_IF1CMD_TXRQST 0x40000 // Access Transmission Request Bit -#define CAN_IF1CMD_CLRINTPND 0x80000 // Clear Interrupt Pending Bit -#define CAN_IF1CMD_CONTROL 0x100000 // Access Control Bits -#define CAN_IF1CMD_ARB 0x200000 // Access Arbitration Bits -#define CAN_IF1CMD_MASK 0x400000 // Access Mask Bits -#define CAN_IF1CMD_DIR 0x800000 // Write/Read Direction - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF1MSK register -// -//***************************************************************************** -#define CAN_IF1MSK_MSK_S 0 -#define CAN_IF1MSK_MSK_M 0x1FFFFFFF // Identifier Mask -#define CAN_IF1MSK_MDIR 0x40000000 // Mask Message Direction -#define CAN_IF1MSK_MXTD 0x80000000 // Mask Extended Identifier - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF1ARB register -// -//***************************************************************************** -#define CAN_IF1ARB_ID_S 0 -#define CAN_IF1ARB_ID_M 0x1FFFFFFF // ` -#define CAN_IF1ARB_DIR 0x20000000 // Message Direction -#define CAN_IF1ARB_XTD 0x40000000 // Extended Identifier -#define CAN_IF1ARB_MSGVAL 0x80000000 // Message Valid - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF1MCTL register -// -//***************************************************************************** -#define CAN_IF1MCTL_DLC_S 0 -#define CAN_IF1MCTL_DLC_M 0xF // Data length code -#define CAN_IF1MCTL_EOB 0x80 // End of Block -#define CAN_IF1MCTL_TXRQST 0x100 // Transmit Request -#define CAN_IF1MCTL_RMTEN 0x200 // Remote Enable -#define CAN_IF1MCTL_RXIE 0x400 // Receive Interrupt Enable -#define CAN_IF1MCTL_TXIE 0x800 // Transmit Interrupt Enable -#define CAN_IF1MCTL_UMASK 0x1000 // Use Acceptance Mask -#define CAN_IF1MCTL_INTPND 0x2000 // Interrupt Pending -#define CAN_IF1MCTL_MSGLST 0x4000 // Message Lost -#define CAN_IF1MCTL_NEWDAT 0x8000 // New Data - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF1DATA register -// -//***************************************************************************** -#define CAN_IF1DATA_DATA_0_S 0 -#define CAN_IF1DATA_DATA_0_M 0xFF // Data Byte 0 -#define CAN_IF1DATA_DATA_1_S 8 -#define CAN_IF1DATA_DATA_1_M 0xFF00 // Data Byte 1 -#define CAN_IF1DATA_DATA_2_S 16 -#define CAN_IF1DATA_DATA_2_M 0xFF0000 // Data Byte 2 -#define CAN_IF1DATA_DATA_3_S 24 -#define CAN_IF1DATA_DATA_3_M 0xFF000000 // Data Byte 3 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF1DATB register -// -//***************************************************************************** -#define CAN_IF1DATB_DATA_4_S 0 -#define CAN_IF1DATB_DATA_4_M 0xFF // Data Byte 4 -#define CAN_IF1DATB_DATA_5_S 8 -#define CAN_IF1DATB_DATA_5_M 0xFF00 // Data Byte 5 -#define CAN_IF1DATB_DATA_6_S 16 -#define CAN_IF1DATB_DATA_6_M 0xFF0000 // Data Byte 6 -#define CAN_IF1DATB_DATA_7_S 24 -#define CAN_IF1DATB_DATA_7_M 0xFF000000 // Data Byte 7 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF2CMD register -// -//***************************************************************************** -#define CAN_IF2CMD_MSG_NUM_S 0 -#define CAN_IF2CMD_MSG_NUM_M 0xFF // Message Number -#define CAN_IF2CMD_BUSY 0x8000 // Busy Flag -#define CAN_IF2CMD_DATA_B 0x10000 // Access Data Bytes 4-7 -#define CAN_IF2CMD_DATA_A 0x20000 // Access Data Bytes 0-3 -#define CAN_IF2CMD_TXRQST 0x40000 // Access Transmission Request Bit -#define CAN_IF2CMD_CLRINTPND 0x80000 // Clear Interrupt Pending Bit -#define CAN_IF2CMD_CONTROL 0x100000 // Access Control Bits -#define CAN_IF2CMD_ARB 0x200000 // Access Arbitration Bits -#define CAN_IF2CMD_MASK 0x400000 // Access Mask Bits -#define CAN_IF2CMD_DIR 0x800000 // Write/Read Direction - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF2MSK register -// -//***************************************************************************** -#define CAN_IF2MSK_MSK_S 0 -#define CAN_IF2MSK_MSK_M 0x1FFFFFFF // Identifier Mask -#define CAN_IF2MSK_MDIR 0x40000000 // Mask Message Direction -#define CAN_IF2MSK_MXTD 0x80000000 // Mask Extended Identifier - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF2ARB register -// -//***************************************************************************** -#define CAN_IF2ARB_ID_S 0 -#define CAN_IF2ARB_ID_M 0x1FFFFFFF // Message Identifier -#define CAN_IF2ARB_DIR 0x20000000 // Message Direction -#define CAN_IF2ARB_XTD 0x40000000 // Extended Identifier -#define CAN_IF2ARB_MSGVAL 0x80000000 // Message Valid - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF2MCTL register -// -//***************************************************************************** -#define CAN_IF2MCTL_DLC_S 0 -#define CAN_IF2MCTL_DLC_M 0xF // Data length code -#define CAN_IF2MCTL_EOB 0x80 // End of Block -#define CAN_IF2MCTL_TXRQST 0x100 // Transmit Request -#define CAN_IF2MCTL_RMTEN 0x200 // Remote Enable -#define CAN_IF2MCTL_RXIE 0x400 // Receive Interrupt Enable -#define CAN_IF2MCTL_TXIE 0x800 // Transmit Interrupt Enable -#define CAN_IF2MCTL_UMASK 0x1000 // Use Acceptance Mask -#define CAN_IF2MCTL_INTPND 0x2000 // Interrupt Pending -#define CAN_IF2MCTL_MSGLST 0x4000 // Message Lost -#define CAN_IF2MCTL_NEWDAT 0x8000 // New Data - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF2DATA register -// -//***************************************************************************** -#define CAN_IF2DATA_DATA_0_S 0 -#define CAN_IF2DATA_DATA_0_M 0xFF // Data Byte 0 -#define CAN_IF2DATA_DATA_1_S 8 -#define CAN_IF2DATA_DATA_1_M 0xFF00 // Data Byte 1 -#define CAN_IF2DATA_DATA_2_S 16 -#define CAN_IF2DATA_DATA_2_M 0xFF0000 // Data Byte 2 -#define CAN_IF2DATA_DATA_3_S 24 -#define CAN_IF2DATA_DATA_3_M 0xFF000000 // Data Byte 3 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF2DATB register -// -//***************************************************************************** -#define CAN_IF2DATB_DATA_4_S 0 -#define CAN_IF2DATB_DATA_4_M 0xFF // Data Byte 4 -#define CAN_IF2DATB_DATA_5_S 8 -#define CAN_IF2DATB_DATA_5_M 0xFF00 // Data Byte 5 -#define CAN_IF2DATB_DATA_6_S 16 -#define CAN_IF2DATB_DATA_6_M 0xFF0000 // Data Byte 6 -#define CAN_IF2DATB_DATA_7_S 24 -#define CAN_IF2DATB_DATA_7_M 0xFF000000 // Data Byte 7 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3OBS register -// -//***************************************************************************** -#define CAN_IF3OBS_MASK 0x1 // Mask data read observation -#define CAN_IF3OBS_ARB 0x2 // Arbitration data read - // observation -#define CAN_IF3OBS_CTRL 0x4 // Ctrl read observation -#define CAN_IF3OBS_DATA_A 0x8 // Data A read observation -#define CAN_IF3OBS_DATA_B 0x10 // Data B read observation -#define CAN_IF3OBS_IF3SM 0x100 // IF3 Status of Mask data read - // access -#define CAN_IF3OBS_IF3SA 0x200 // IF3 Status of Arbitration data - // read access -#define CAN_IF3OBS_IF3SC 0x400 // IF3 Status of Control bits read - // access -#define CAN_IF3OBS_IF3SDA 0x800 // IF3 Status of Data A read - // access -#define CAN_IF3OBS_IF3SDB 0x1000 // IF3 Status of Data B read - // access -#define CAN_IF3OBS_IF3UPD 0x8000 // IF3 Update Data - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3MSK register -// -//***************************************************************************** -#define CAN_IF3MSK_MSK_S 0 -#define CAN_IF3MSK_MSK_M 0x1FFFFFFF // Mask -#define CAN_IF3MSK_MDIR 0x40000000 // Mask Message Direction -#define CAN_IF3MSK_MXTD 0x80000000 // Mask Extended Identifier - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3ARB register -// -//***************************************************************************** -#define CAN_IF3ARB_ID_S 0 -#define CAN_IF3ARB_ID_M 0x1FFFFFFF // Message Identifier -#define CAN_IF3ARB_DIR 0x20000000 // Message Direction -#define CAN_IF3ARB_XTD 0x40000000 // Extended Identifier -#define CAN_IF3ARB_MSGVAL 0x80000000 // Message Valid - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3MCTL register -// -//***************************************************************************** -#define CAN_IF3MCTL_DLC_S 0 -#define CAN_IF3MCTL_DLC_M 0xF // Data length code -#define CAN_IF3MCTL_EOB 0x80 // End of Block -#define CAN_IF3MCTL_TXRQST 0x100 // Transmit Request -#define CAN_IF3MCTL_RMTEN 0x200 // Remote Enable -#define CAN_IF3MCTL_RXIE 0x400 // Receive Interrupt Enable -#define CAN_IF3MCTL_TXIE 0x800 // Transmit Interrupt Enable -#define CAN_IF3MCTL_UMASK 0x1000 // Use Acceptance Mask -#define CAN_IF3MCTL_INTPND 0x2000 // Interrupt Pending -#define CAN_IF3MCTL_MSGLST 0x4000 // Message Lost -#define CAN_IF3MCTL_NEWDAT 0x8000 // New Data - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3DATA register -// -//***************************************************************************** -#define CAN_IF3DATA_DATA_0_S 0 -#define CAN_IF3DATA_DATA_0_M 0xFF // Data Byte 0 -#define CAN_IF3DATA_DATA_1_S 8 -#define CAN_IF3DATA_DATA_1_M 0xFF00 // Data Byte 1 -#define CAN_IF3DATA_DATA_2_S 16 -#define CAN_IF3DATA_DATA_2_M 0xFF0000 // Data Byte 2 -#define CAN_IF3DATA_DATA_3_S 24 -#define CAN_IF3DATA_DATA_3_M 0xFF000000 // Data Byte 3 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3DATB register -// -//***************************************************************************** -#define CAN_IF3DATB_DATA_4_S 0 -#define CAN_IF3DATB_DATA_4_M 0xFF // Data Byte 4 -#define CAN_IF3DATB_DATA_5_S 8 -#define CAN_IF3DATB_DATA_5_M 0xFF00 // Data Byte 5 -#define CAN_IF3DATB_DATA_6_S 16 -#define CAN_IF3DATB_DATA_6_M 0xFF0000 // Data Byte 6 -#define CAN_IF3DATB_DATA_7_S 24 -#define CAN_IF3DATB_DATA_7_M 0xFF000000 // Data Byte 7 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAN_IF3UPD register -// -//***************************************************************************** -#define CAN_IF3UPD_IF3UPDEN_S 0 -#define CAN_IF3UPD_IF3UPDEN_M 0xFFFFFFFF // IF3 Update Enabled -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cmpss.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cmpss.h deleted file mode 100644 index c87a8840e8..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cmpss.h +++ /dev/null @@ -1,295 +0,0 @@ -//########################################################################### -// -// FILE: hw_cmpss.h -// -// TITLE: Definitions for the C28x CMPSS registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_CMPSS_H__ -#define __HW_CMPSS_H__ - -//***************************************************************************** -// -// The following are defines for the CMPSS register offsets -// -//***************************************************************************** -#define CMPSS_O_COMPCTL 0x0 // CMPSS Comparator Control - // Register -#define CMPSS_O_COMPHYSCTL 0x1 // CMPSS Comparator Hysteresis - // Control Register -#define CMPSS_O_COMPSTS 0x2 // CMPSS Comparator Status - // Register -#define CMPSS_O_COMPSTSCLR 0x3 // CMPSS Comparator Status Clear - // Register -#define CMPSS_O_COMPDACCTL 0x4 // CMPSS DAC Control Register -#define CMPSS_O_DACHVALS 0x6 // CMPSS High DAC Value Shadow - // Register -#define CMPSS_O_DACHVALA 0x7 // CMPSS High DAC Value Active - // Register -#define CMPSS_O_RAMPMAXREFA 0x8 // CMPSS Ramp Max Reference Active - // Register -#define CMPSS_O_RAMPMAXREFS 0xA // CMPSS Ramp Max Reference Shadow - // Register -#define CMPSS_O_RAMPDECVALA 0xC // CMPSS Ramp Decrement Value - // Active Register -#define CMPSS_O_RAMPDECVALS 0xE // CMPSS Ramp Decrement Value - // Shadow Register -#define CMPSS_O_RAMPSTS 0x10 // CMPSS Ramp Status Register -#define CMPSS_O_DACLVALS 0x12 // CMPSS Low DAC Value Shadow - // Register -#define CMPSS_O_DACLVALA 0x13 // CMPSS Low DAC Value Active - // Register -#define CMPSS_O_RAMPDLYA 0x14 // CMPSS Ramp Delay Active - // Register -#define CMPSS_O_RAMPDLYS 0x15 // CMPSS Ramp Delay Shadow - // Register -#define CMPSS_O_CTRIPLFILCTL 0x16 // CTRIPL Filter Control Register -#define CMPSS_O_CTRIPLFILCLKCTL 0x17 // CTRIPL Filter Clock Control - // Register -#define CMPSS_O_CTRIPHFILCTL 0x18 // CTRIPH Filter Control Register -#define CMPSS_O_CTRIPHFILCLKCTL 0x19 // CTRIPH Filter Clock Control - // Register -#define CMPSS_O_COMPLOCK 0x1A // CMPSS Lock Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the COMPCTL register -// -//***************************************************************************** -#define CMPSS_COMPCTL_COMPHSOURCE 0x1 // High Comparator Source Select -#define CMPSS_COMPCTL_COMPHINV 0x2 // High Comparator Invert Select -#define CMPSS_COMPCTL_CTRIPHSEL_S 2 -#define CMPSS_COMPCTL_CTRIPHSEL_M 0xC // High Comparator Trip Select -#define CMPSS_COMPCTL_CTRIPOUTHSEL_S 4 -#define CMPSS_COMPCTL_CTRIPOUTHSEL_M 0x30 // High Comparator Trip Output - // Select -#define CMPSS_COMPCTL_ASYNCHEN 0x40 // High Comparator Asynchronous - // Path Enable -#define CMPSS_COMPCTL_COMPLSOURCE 0x100 // Low Comparator Source Select -#define CMPSS_COMPCTL_COMPLINV 0x200 // Low Comparator Invert Select -#define CMPSS_COMPCTL_CTRIPLSEL_S 10 -#define CMPSS_COMPCTL_CTRIPLSEL_M 0xC00 // Low Comparator Trip Select -#define CMPSS_COMPCTL_CTRIPOUTLSEL_S 12 -#define CMPSS_COMPCTL_CTRIPOUTLSEL_M 0x3000 // Low Comparator Trip Output - // Select -#define CMPSS_COMPCTL_ASYNCLEN 0x4000 // Low Comparator Asynchronous - // Path Enable -#define CMPSS_COMPCTL_COMPDACE 0x8000 // Comparator/DAC Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the COMPHYSCTL register -// -//***************************************************************************** -#define CMPSS_COMPHYSCTL_COMPHYS_S 0 -#define CMPSS_COMPHYSCTL_COMPHYS_M 0x7 // Comparator Hysteresis Trim - -//***************************************************************************** -// -// The following are defines for the bit fields in the COMPSTS register -// -//***************************************************************************** -#define CMPSS_COMPSTS_COMPHSTS 0x1 // High Comparator Status -#define CMPSS_COMPSTS_COMPHLATCH 0x2 // High Comparator Latched Status -#define CMPSS_COMPSTS_COMPLSTS 0x100 // Low Comparator Status -#define CMPSS_COMPSTS_COMPLLATCH 0x200 // Low Comparator Latched Status - -//***************************************************************************** -// -// The following are defines for the bit fields in the COMPSTSCLR register -// -//***************************************************************************** -#define CMPSS_COMPSTSCLR_HLATCHCLR 0x2 // High Comparator Latched Status - // Clear -#define CMPSS_COMPSTSCLR_HSYNCCLREN 0x4 // High Comparator PWMSYNC Clear - // Enable -#define CMPSS_COMPSTSCLR_LLATCHCLR 0x200 // Low Comparator Latched Status - // Clear -#define CMPSS_COMPSTSCLR_LSYNCCLREN 0x400 // Low Comparator PWMSYNC Clear - // Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the COMPDACCTL register -// -//***************************************************************************** -#define CMPSS_COMPDACCTL_DACSOURCE 0x1 // DAC Source Control -#define CMPSS_COMPDACCTL_RAMPSOURCE_S 1 -#define CMPSS_COMPDACCTL_RAMPSOURCE_M 0x1E // Ramp Generator Source Control -#define CMPSS_COMPDACCTL_SELREF 0x20 // DAC Reference Select -#define CMPSS_COMPDACCTL_RAMPLOADSEL 0x40 // Ramp Load Select -#define CMPSS_COMPDACCTL_SWLOADSEL 0x80 // Software Load Select -#define CMPSS_COMPDACCTL_FREESOFT_S 14 -#define CMPSS_COMPDACCTL_FREESOFT_M 0xC000 // Free/Soft Emulation Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the DACHVALS register -// -//***************************************************************************** -#define CMPSS_DACHVALS_DACVAL_S 0 -#define CMPSS_DACHVALS_DACVAL_M 0xFFF // DAC Value Control - -//***************************************************************************** -// -// The following are defines for the bit fields in the DACHVALA register -// -//***************************************************************************** -#define CMPSS_DACHVALA_DACVAL_S 0 -#define CMPSS_DACHVALA_DACVAL_M 0xFFF // DAC Value Control - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPMAXREFA register -// -//***************************************************************************** -#define CMPSS_RAMPMAXREFA_RAMPMAXREF_S 0 -#define CMPSS_RAMPMAXREFA_RAMPMAXREF_M 0xFFFF // Ramp Maximum Reference Active - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPMAXREFS register -// -//***************************************************************************** -#define CMPSS_RAMPMAXREFS_RAMPMAXREF_S 0 -#define CMPSS_RAMPMAXREFS_RAMPMAXREF_M 0xFFFF // Ramp Maximum Reference Shadow - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPDECVALA register -// -//***************************************************************************** -#define CMPSS_RAMPDECVALA_RAMPDECVAL_S 0 -#define CMPSS_RAMPDECVALA_RAMPDECVAL_M 0xFFFF // Ramp Decrement Value Active - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPDECVALS register -// -//***************************************************************************** -#define CMPSS_RAMPDECVALS_RAMPDECVAL_S 0 -#define CMPSS_RAMPDECVALS_RAMPDECVAL_M 0xFFFF // Ramp Decrement Value Shadow - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPSTS register -// -//***************************************************************************** -#define CMPSS_RAMPSTS_RAMPVALUE_S 0 -#define CMPSS_RAMPSTS_RAMPVALUE_M 0xFFFF // Ramp Value - -//***************************************************************************** -// -// The following are defines for the bit fields in the DACLVALS register -// -//***************************************************************************** -#define CMPSS_DACLVALS_DACVAL_S 0 -#define CMPSS_DACLVALS_DACVAL_M 0xFFF // DAC Value Control - -//***************************************************************************** -// -// The following are defines for the bit fields in the DACLVALA register -// -//***************************************************************************** -#define CMPSS_DACLVALA_DACVAL_S 0 -#define CMPSS_DACLVALA_DACVAL_M 0xFFF // DAC Value Control - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPDLYA register -// -//***************************************************************************** -#define CMPSS_RAMPDLYA_DELAY_S 0 -#define CMPSS_RAMPDLYA_DELAY_M 0x1FFF // Ramp Delay Value - -//***************************************************************************** -// -// The following are defines for the bit fields in the RAMPDLYS register -// -//***************************************************************************** -#define CMPSS_RAMPDLYS_DELAY_S 0 -#define CMPSS_RAMPDLYS_DELAY_M 0x1FFF // Ramp Delay Value - -//***************************************************************************** -// -// The following are defines for the bit fields in the CTRIPLFILCTL register -// -//***************************************************************************** -#define CMPSS_CTRIPLFILCTL_SAMPWIN_S 4 -#define CMPSS_CTRIPLFILCTL_SAMPWIN_M 0x1F0 // Sample Window -#define CMPSS_CTRIPLFILCTL_THRESH_S 9 -#define CMPSS_CTRIPLFILCTL_THRESH_M 0x3E00 // Majority Voting Threshold -#define CMPSS_CTRIPLFILCTL_FILINIT 0x8000 // Filter Initialization Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the CTRIPLFILCLKCTL register -// -//***************************************************************************** -#define CMPSS_CTRIPLFILCLKCTL_CLKPRESCALE_S 0 -#define CMPSS_CTRIPLFILCLKCTL_CLKPRESCALE_M 0x3FF // Sample Clock Prescale - -//***************************************************************************** -// -// The following are defines for the bit fields in the CTRIPHFILCTL register -// -//***************************************************************************** -#define CMPSS_CTRIPHFILCTL_SAMPWIN_S 4 -#define CMPSS_CTRIPHFILCTL_SAMPWIN_M 0x1F0 // Sample Window -#define CMPSS_CTRIPHFILCTL_THRESH_S 9 -#define CMPSS_CTRIPHFILCTL_THRESH_M 0x3E00 // Majority Voting Threshold -#define CMPSS_CTRIPHFILCTL_FILINIT 0x8000 // Filter Initialization Bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the CTRIPHFILCLKCTL register -// -//***************************************************************************** -#define CMPSS_CTRIPHFILCLKCTL_CLKPRESCALE_S 0 -#define CMPSS_CTRIPHFILCLKCTL_CLKPRESCALE_M 0x3FF // Sample Clock Prescale - -//***************************************************************************** -// -// The following are defines for the bit fields in the COMPLOCK register -// -//***************************************************************************** -#define CMPSS_COMPLOCK_COMPCTL 0x1 // COMPCTL Lock -#define CMPSS_COMPLOCK_COMPHYSCTL 0x2 // COMPHYSCTL Lock -#define CMPSS_COMPLOCK_DACCTL 0x4 // DACCTL Lock -#define CMPSS_COMPLOCK_CTRIP 0x8 // CTRIP Lock -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cputimer.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cputimer.h deleted file mode 100644 index c29d0dbcb2..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_cputimer.h +++ /dev/null @@ -1,125 +0,0 @@ -//########################################################################### -// -// FILE: hw_cputimer.h -// -// TITLE: Definitions for the C28x CPUTIMER registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_CPUTIMER_H__ -#define __HW_CPUTIMER_H__ - -//***************************************************************************** -// -// The following are defines for the CPUTIMER register offsets -// -//***************************************************************************** -#define CPUTIMER_O_TIM 0x0 // CPU-Timer, Counter Register -#define CPUTIMER_O_TIMH 0x1 // CPU-Timer, Counter Register - // High -#define CPUTIMER_O_PRD 0x2 // CPU-Timer, Period Register -#define CPUTIMER_O_PRDH 0x3 // CPU-Timer, Period Register High -#define CPUTIMER_O_TCR 0x4 // CPU-Timer, Control Register -#define CPUTIMER_O_TPR 0x6 // CPU-Timer, Prescale Register -#define CPUTIMER_O_TPRH 0x7 // CPU-Timer, Prescale Register - // High - -//***************************************************************************** -// -// The following are defines for the bit fields in the TIM register -// -//***************************************************************************** -#define CPUTIMER_TIM_TIM_S 0 -#define CPUTIMER_TIM_TIM_M 0xFFFF // CPU-Timer Counter Registers - -//***************************************************************************** -// -// The following are defines for the bit fields in the TIMH register -// -//***************************************************************************** -#define CPUTIMER_TIMH_TIMH_S 0 -#define CPUTIMER_TIMH_TIMH_M 0xFFFF // CPU-Timer Counter Registers - // High - -//***************************************************************************** -// -// The following are defines for the bit fields in the PRD register -// -//***************************************************************************** -#define CPUTIMER_PRD_PRD_S 0 -#define CPUTIMER_PRD_PRD_M 0xFFFF // CPU-Timer Period Registers - -//***************************************************************************** -// -// The following are defines for the bit fields in the PRDH register -// -//***************************************************************************** -#define CPUTIMER_PRDH_PRDH_S 0 -#define CPUTIMER_PRDH_PRDH_M 0xFFFF // CPU-Timer Period Registers High - -//***************************************************************************** -// -// The following are defines for the bit fields in the TCR register -// -//***************************************************************************** -#define CPUTIMER_TCR_TSS 0x10 // CPU-Timer stop status bit. -#define CPUTIMER_TCR_TRB 0x20 // Timer reload -#define CPUTIMER_TCR_FREE_SOFT_S 10 -#define CPUTIMER_TCR_FREE_SOFT_M 0xC00 // Emulation modes -#define CPUTIMER_TCR_TIE 0x4000 // CPU-Timer Interrupt Enable. -#define CPUTIMER_TCR_TIF 0x8000 // CPU-Timer Interrupt Flag. - -//***************************************************************************** -// -// The following are defines for the bit fields in the TPR register -// -//***************************************************************************** -#define CPUTIMER_TPR_TDDR_S 0 -#define CPUTIMER_TPR_TDDR_M 0xFF // CPU-Timer Divide-Down. -#define CPUTIMER_TPR_PSC_S 8 -#define CPUTIMER_TPR_PSC_M 0xFF00 // CPU-Timer Prescale Counter. - -//***************************************************************************** -// -// The following are defines for the bit fields in the TPRH register -// -//***************************************************************************** -#define CPUTIMER_TPRH_TDDRH_S 0 -#define CPUTIMER_TPRH_TDDRH_M 0xFF // CPU-Timer Divide-Down. -#define CPUTIMER_TPRH_PSCH_S 8 -#define CPUTIMER_TPRH_PSCH_M 0xFF00 // CPU-Timer Prescale Counter. -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ecap.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ecap.h deleted file mode 100644 index ed45234ce1..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ecap.h +++ /dev/null @@ -1,220 +0,0 @@ -//########################################################################### -// -// FILE: hw_ecap.h -// -// TITLE: Definitions for the C28x ECAP registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_ECAP_H__ -#define __HW_ECAP_H__ - -//***************************************************************************** -// -// The following are defines for the ECAP register offsets -// -//***************************************************************************** -#define ECAP_O_TSCTR 0x0 // Time-Stamp Counter -#define ECAP_O_CTRPHS 0x2 // Counter Phase Offset Value - // Register -#define ECAP_O_CAP1 0x4 // Capture 1 Register -#define ECAP_O_CAP2 0x6 // Capture 2 Register -#define ECAP_O_CAP3 0x8 // Capture 3Register -#define ECAP_O_CAP4 0xA // Capture 4 Register -#define ECAP_O_ECCTL1 0x14 // Capture Control Register 1 -#define ECAP_O_ECCTL2 0x15 // Capture Control Register 2 -#define ECAP_O_ECEINT 0x16 // Capture Interrupt Enable - // Register -#define ECAP_O_ECFLG 0x17 // Capture Interrupt Flag Register -#define ECAP_O_ECCLR 0x18 // Capture Interrupt Flag Register -#define ECAP_O_ECFRC 0x19 // Capture Interrupt Force - // Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the TSCTR register -// -//***************************************************************************** -#define ECAP_TSCTR_TSCTR_S 0 -#define ECAP_TSCTR_TSCTR_M 0xFFFFFFFF // Time Stamp Counter - -//***************************************************************************** -// -// The following are defines for the bit fields in the CTRPHS register -// -//***************************************************************************** -#define ECAP_CTRPHS_CTRPHS_S 0 -#define ECAP_CTRPHS_CTRPHS_M 0xFFFFFFFF // Counter phase - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAP1 register -// -//***************************************************************************** -#define ECAP_CAP1_CAP1_S 0 -#define ECAP_CAP1_CAP1_M 0xFFFFFFFF // Capture 1 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAP2 register -// -//***************************************************************************** -#define ECAP_CAP2_CAP2_S 0 -#define ECAP_CAP2_CAP2_M 0xFFFFFFFF // Capture 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAP3 register -// -//***************************************************************************** -#define ECAP_CAP3_CAP3_S 0 -#define ECAP_CAP3_CAP3_M 0xFFFFFFFF // Capture 3 - -//***************************************************************************** -// -// The following are defines for the bit fields in the CAP4 register -// -//***************************************************************************** -#define ECAP_CAP4_CAP4_S 0 -#define ECAP_CAP4_CAP4_M 0xFFFFFFFF // Capture 4 - -//***************************************************************************** -// -// The following are defines for the bit fields in the ECCTL1 register -// -//***************************************************************************** -#define ECAP_ECCTL1_CAP1POL 0x1 // Capture Event 1 Polarity select -#define ECAP_ECCTL1_CTRRST1 0x2 // Counter Reset on Capture Event - // 1 -#define ECAP_ECCTL1_CAP2POL 0x4 // Capture Event 2 Polarity select -#define ECAP_ECCTL1_CTRRST2 0x8 // Counter Reset on Capture Event - // 2 -#define ECAP_ECCTL1_CAP3POL 0x10 // Capture Event 3 Polarity select -#define ECAP_ECCTL1_CTRRST3 0x20 // Counter Reset on Capture Event - // 3 -#define ECAP_ECCTL1_CAP4POL 0x40 // Capture Event 4 Polarity select -#define ECAP_ECCTL1_CTRRST4 0x80 // Counter Reset on Capture Event - // 4 -#define ECAP_ECCTL1_CAPLDEN 0x100 // Enable Loading CAP1-4 regs on a - // Cap Event -#define ECAP_ECCTL1_PRESCALE_S 9 -#define ECAP_ECCTL1_PRESCALE_M 0x3E00 // Event Filter prescale select -#define ECAP_ECCTL1_FREE_SOFT_S 14 -#define ECAP_ECCTL1_FREE_SOFT_M 0xC000 // Emulation mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the ECCTL2 register -// -//***************************************************************************** -#define ECAP_ECCTL2_CONT_ONESHT 0x1 // Continuous or one-shot -#define ECAP_ECCTL2_STOP_WRAP_S 1 -#define ECAP_ECCTL2_STOP_WRAP_M 0x6 // Stop value for one-shot, Wrap - // for continuous -#define ECAP_ECCTL2_RE_ARM 0x8 // One-shot re-arm -#define ECAP_ECCTL2_TSCTRSTOP 0x10 // TSCNT counter stop -#define ECAP_ECCTL2_SYNCI_EN 0x20 // Counter sync-in select -#define ECAP_ECCTL2_SYNCO_SEL_S 6 -#define ECAP_ECCTL2_SYNCO_SEL_M 0xC0 // Sync-out mode -#define ECAP_ECCTL2_SWSYNC 0x100 // SW forced counter sync -#define ECAP_ECCTL2_CAP_APWM 0x200 // CAP/APWM operating mode select -#define ECAP_ECCTL2_APWMPOL 0x400 // APWM output polarity select - -//***************************************************************************** -// -// The following are defines for the bit fields in the ECEINT register -// -//***************************************************************************** -#define ECAP_ECEINT_CEVT1 0x2 // Capture Event 1 Interrupt - // Enable -#define ECAP_ECEINT_CEVT2 0x4 // Capture Event 2 Interrupt - // Enable -#define ECAP_ECEINT_CEVT3 0x8 // Capture Event 3 Interrupt - // Enable -#define ECAP_ECEINT_CEVT4 0x10 // Capture Event 4 Interrupt - // Enable -#define ECAP_ECEINT_CTROVF 0x20 // Counter Overflow Interrupt - // Enable -#define ECAP_ECEINT_CTR_PRD 0x40 // Period Equal Interrupt Enable -#define ECAP_ECEINT_CTR_CMP 0x80 // Compare Equal Interrupt Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ECFLG register -// -//***************************************************************************** -#define ECAP_ECFLG_INT 0x1 // Global Flag -#define ECAP_ECFLG_CEVT1 0x2 // Capture Event 1 Interrupt Flag -#define ECAP_ECFLG_CEVT2 0x4 // Capture Event 2 Interrupt Flag -#define ECAP_ECFLG_CEVT3 0x8 // Capture Event 3 Interrupt Flag -#define ECAP_ECFLG_CEVT4 0x10 // Capture Event 4 Interrupt Flag -#define ECAP_ECFLG_CTROVF 0x20 // Counter Overflow Interrupt Flag -#define ECAP_ECFLG_CTR_PRD 0x40 // Period Equal Interrupt Flag -#define ECAP_ECFLG_CTR_CMP 0x80 // Compare Equal Interrupt Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ECCLR register -// -//***************************************************************************** -#define ECAP_ECCLR_INT 0x1 // Global Flag -#define ECAP_ECCLR_CEVT1 0x2 // Capture Event 1 Interrupt Flag -#define ECAP_ECCLR_CEVT2 0x4 // Capture Event 2 Interrupt Flag -#define ECAP_ECCLR_CEVT3 0x8 // Capture Event 3 Interrupt Flag -#define ECAP_ECCLR_CEVT4 0x10 // Capture Event 4 Interrupt Flag -#define ECAP_ECCLR_CTROVF 0x20 // Counter Overflow Interrupt Flag -#define ECAP_ECCLR_CTR_PRD 0x40 // Period Equal Interrupt Flag -#define ECAP_ECCLR_CTR_CMP 0x80 // Compare Equal Interrupt Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ECFRC register -// -//***************************************************************************** -#define ECAP_ECFRC_CEVT1 0x2 // Capture Event 1 Interrupt - // Enable -#define ECAP_ECFRC_CEVT2 0x4 // Capture Event 2 Interrupt - // Enable -#define ECAP_ECFRC_CEVT3 0x8 // Capture Event 3 Interrupt - // Enable -#define ECAP_ECFRC_CEVT4 0x10 // Capture Event 4 Interrupt - // Enable -#define ECAP_ECFRC_CTROVF 0x20 // Counter Overflow Interrupt - // Enable -#define ECAP_ECFRC_CTR_PRD 0x40 // Period Equal Interrupt Enable -#define ECAP_ECFRC_CTR_CMP 0x80 // Compare Equal Interrupt Enable -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_emif.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_emif.h deleted file mode 100644 index f753222091..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_emif.h +++ /dev/null @@ -1,372 +0,0 @@ -//########################################################################### -// -// FILE: hw_emif.h -// -// TITLE: Definitions for the C28x EMIF registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_EMIF_H__ -#define __HW_EMIF_H__ - -//***************************************************************************** -// -// The following are defines for the EMIF register offsets -// -//***************************************************************************** -#define EMIF_O_RCSR 0x0 // Revision Code and Status - // Register -#define EMIF_O_ASYNC_WCCR 0x2 // Async Wait Cycle Config - // Register -#define EMIF_O_SDRAM_CR 0x4 // SDRAM - // (pad_cs_o_n[0]/pad_cs_o_n[1]) - // Config Register -#define EMIF_O_SDRAM_RCR 0x6 // SDRAM Refresh Control Register -#define EMIF_O_ASYNC_CS2_CR 0x8 // Async 1 (pad_cs_o_n[2]) Config - // Register -#define EMIF_O_ASYNC_CS3_CR 0xA // Async 2 (pad_cs_o_n[3]) Config - // Register -#define EMIF_O_ASYNC_CS4_CR 0xC // Async 3 (pad_cs_o_n[4]) Config - // Register -#define EMIF_O_ASYNC_CS5_CR 0xE // Async 4 (pad_cs_o_n[5]) Config - // Register -#define EMIF_O_SDRAM_TR 0x10 // SDRAM Timing Register -#define EMIF_O_TOTAL_SDRAM_AR 0x18 // Total SDRAM Accesses Register -#define EMIF_O_TOTAL_SDRAM_ACTR 0x1A // Total SDRAM Activate Register -#define EMIF_O_SDR_EXT_TMNG 0x1E // SDRAM SR/PD Exit Timing - // Register -#define EMIF_O_INT_RAW 0x20 // Interrupt Raw Register -#define EMIF_O_INT_MSK 0x22 // Interrupt Masked Register -#define EMIF_O_INT_MSK_SET 0x24 // Interrupt Mask Set Register -#define EMIF_O_INT_MSK_CLR 0x26 // Interrupt Mask Clear Register -#define EMIF_O_IO_CTRL 0x28 // IO Control Register -#define EMIF_O_IO_STAT 0x2A // IO Status Register -#define EMIF_O_MODEL_REL_NUM 0x56 // Module Release Number Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the RCSR register -// -//***************************************************************************** -#define EMIF_RCSR_MINOR_REVISION_S 0 -#define EMIF_RCSR_MINOR_REVISION_M 0xFF // Minor Revision. -#define EMIF_RCSR_MAJOR_REVISION_S 8 -#define EMIF_RCSR_MAJOR_REVISION_M 0xFF00 // Major Revision. -#define EMIF_RCSR_MODULE_ID_S 16 -#define EMIF_RCSR_MODULE_ID_M 0x3FFF0000 // EMIF module ID. -#define EMIF_RCSR_FR 0x40000000 // EMIF is running in full rate or - // half rate. -#define EMIF_RCSR_BE 0x80000000 // EMIF endian mode. - -//***************************************************************************** -// -// The following are defines for the bit fields in the ASYNC_WCCR register -// -//***************************************************************************** -#define EMIF_ASYNC_WCCR_MAX_EXT_WAIT_S 0 -#define EMIF_ASYNC_WCCR_MAX_EXT_WAIT_M 0xFF // Maximum Extended Wait cycles. -#define EMIF_ASYNC_WCCR_CS2_WAIT_S 16 -#define EMIF_ASYNC_WCCR_CS2_WAIT_M 0x30000 // Maps the wait signal for chip - // select 2. -#define EMIF_ASYNC_WCCR_CS3_WAIT_S 18 -#define EMIF_ASYNC_WCCR_CS3_WAIT_M 0xC0000 // Maps the wait signal for chip - // select 3. -#define EMIF_ASYNC_WCCR_CS4_WAIT_S 20 -#define EMIF_ASYNC_WCCR_CS4_WAIT_M 0x300000 // Maps the wait signal for chip - // select 4. -#define EMIF_ASYNC_WCCR_CS5_WAIT_S 22 -#define EMIF_ASYNC_WCCR_CS5_WAIT_M 0xC00000 // Maps the wait signal for chip - // select 5. -#define EMIF_ASYNC_WCCR_WP0 0x10000000 // Wait Polarity for - // pad_wait_i[0]. -#define EMIF_ASYNC_WCCR_WP1 0x20000000 // Wait Polarity for - // pad_wait_i[1]. -#define EMIF_ASYNC_WCCR_WP2 0x40000000 // Wait Polarity for - // pad_wait_i[2]. -#define EMIF_ASYNC_WCCR_WP3 0x80000000 // Wait Polarity for - // pad_wait_i[3]. - -//***************************************************************************** -// -// The following are defines for the bit fields in the SDRAM_CR register -// -//***************************************************************************** -#define EMIF_SDRAM_CR_PAGESIGE_S 0 -#define EMIF_SDRAM_CR_PAGESIGE_M 0x7 // Page Size. -#define EMIF_SDRAM_CR_EBANK 0x8 // External chip select setup. -#define EMIF_SDRAM_CR_IBANK_S 4 -#define EMIF_SDRAM_CR_IBANK_M 0x70 // Internal Bank setup of SDRAM - // devices. -#define EMIF_SDRAM_CR_BIT_11_9_LOCK 0x100 // Bits 11 to 9 are writable only - // if this bit is set. -#define EMIF_SDRAM_CR_CL_S 9 -#define EMIF_SDRAM_CR_CL_M 0xE00 // CAS Latency. -#define EMIF_SDRAM_CR_BIT_13_LOCK 0x1000 // Bits 13 is writable only if - // this bit is set. -#define EMIF_SDRAM_CR_NM 0x4000 // Narrow Mode. -#define EMIF_SDRAM_CR_BIT_25_17_LOCK 0x10000 // Bits 25 to 17 are writable only - // if this bit is set -#define EMIF_SDRAM_CR_IBANK_POS 0x80000 // Internal bank position. -#define EMIF_SDRAM_CR_ROWSIZE_S 20 -#define EMIF_SDRAM_CR_ROWSIZE_M 0x700000 // Row Size. -#define EMIF_SDRAM_CR_PASR_S 23 -#define EMIF_SDRAM_CR_PASR_M 0x3800000 // Partial Array Self Refresh. -#define EMIF_SDRAM_CR_PDWR 0x20000000 // Perform refreshes during Power - // Down. -#define EMIF_SDRAM_CR_PD 0x40000000 // Power Down. -#define EMIF_SDRAM_CR_SR 0x80000000 // Self Refresh. - -//***************************************************************************** -// -// The following are defines for the bit fields in the SDRAM_RCR register -// -//***************************************************************************** -#define EMIF_SDRAM_RCR_REFRESH_RATE_S 0 -#define EMIF_SDRAM_RCR_REFRESH_RATE_M 0x1FFF // Refresh Rate. - -//***************************************************************************** -// -// The following are defines for the bit fields in the ASYNC_CS2_CR register -// -//***************************************************************************** -#define EMIF_ASYNC_CS2_CR_ASIZE_S 0 -#define EMIF_ASYNC_CS2_CR_ASIZE_M 0x3 // Asynchronous Memory Size. -#define EMIF_ASYNC_CS2_CR_TA_S 2 -#define EMIF_ASYNC_CS2_CR_TA_M 0xC // Turn Around cycles. -#define EMIF_ASYNC_CS2_CR_R_HOLD_S 4 -#define EMIF_ASYNC_CS2_CR_R_HOLD_M 0x70 // Read Strobe Hold cycles. -#define EMIF_ASYNC_CS2_CR_R_STROBE_S 7 -#define EMIF_ASYNC_CS2_CR_R_STROBE_M 0x1F80 // Read Strobe Duration cycles. -#define EMIF_ASYNC_CS2_CR_R_SETUP_S 13 -#define EMIF_ASYNC_CS2_CR_R_SETUP_M 0x1E000 // Read Strobe Setup cycles. -#define EMIF_ASYNC_CS2_CR_W_HOLD_S 17 -#define EMIF_ASYNC_CS2_CR_W_HOLD_M 0xE0000 // Write Strobe Hold cycles. -#define EMIF_ASYNC_CS2_CR_W_STROBE_S 20 -#define EMIF_ASYNC_CS2_CR_W_STROBE_M 0x3F00000 // Write Strobe Duration cycles. -#define EMIF_ASYNC_CS2_CR_W_SETUP_S 26 -#define EMIF_ASYNC_CS2_CR_W_SETUP_M 0x3C000000 // Write Strobe Setup cycles. -#define EMIF_ASYNC_CS2_CR_EW 0x40000000 // Extend Wait mode. -#define EMIF_ASYNC_CS2_CR_SS 0x80000000 // Select Strobe mode. - -//***************************************************************************** -// -// The following are defines for the bit fields in the ASYNC_CS3_CR register -// -//***************************************************************************** -#define EMIF_ASYNC_CS3_CR_ASIZE_S 0 -#define EMIF_ASYNC_CS3_CR_ASIZE_M 0x3 // Asynchronous Memory Size. -#define EMIF_ASYNC_CS3_CR_TA_S 2 -#define EMIF_ASYNC_CS3_CR_TA_M 0xC // Turn Around cycles. -#define EMIF_ASYNC_CS3_CR_R_HOLD_S 4 -#define EMIF_ASYNC_CS3_CR_R_HOLD_M 0x70 // Read Strobe Hold cycles. -#define EMIF_ASYNC_CS3_CR_R_STROBE_S 7 -#define EMIF_ASYNC_CS3_CR_R_STROBE_M 0x1F80 // Read Strobe Duration cycles. -#define EMIF_ASYNC_CS3_CR_R_SETUP_S 13 -#define EMIF_ASYNC_CS3_CR_R_SETUP_M 0x1E000 // Read Strobe Setup cycles. -#define EMIF_ASYNC_CS3_CR_W_HOLD_S 17 -#define EMIF_ASYNC_CS3_CR_W_HOLD_M 0xE0000 // Write Strobe Hold cycles. -#define EMIF_ASYNC_CS3_CR_W_STROBE_S 20 -#define EMIF_ASYNC_CS3_CR_W_STROBE_M 0x3F00000 // Write Strobe Duration cycles. -#define EMIF_ASYNC_CS3_CR_W_SETUP_S 26 -#define EMIF_ASYNC_CS3_CR_W_SETUP_M 0x3C000000 // Write Strobe Setup cycles. -#define EMIF_ASYNC_CS3_CR_EW 0x40000000 // Extend Wait mode. -#define EMIF_ASYNC_CS3_CR_SS 0x80000000 // Select Strobe mode. - -//***************************************************************************** -// -// The following are defines for the bit fields in the ASYNC_CS4_CR register -// -//***************************************************************************** -#define EMIF_ASYNC_CS4_CR_ASIZE_S 0 -#define EMIF_ASYNC_CS4_CR_ASIZE_M 0x3 // Asynchronous Memory Size. -#define EMIF_ASYNC_CS4_CR_TA_S 2 -#define EMIF_ASYNC_CS4_CR_TA_M 0xC // Turn Around cycles. -#define EMIF_ASYNC_CS4_CR_R_HOLD_S 4 -#define EMIF_ASYNC_CS4_CR_R_HOLD_M 0x70 // Read Strobe Hold cycles. -#define EMIF_ASYNC_CS4_CR_R_STROBE_S 7 -#define EMIF_ASYNC_CS4_CR_R_STROBE_M 0x1F80 // Read Strobe Duration cycles. -#define EMIF_ASYNC_CS4_CR_R_SETUP_S 13 -#define EMIF_ASYNC_CS4_CR_R_SETUP_M 0x1E000 // Read Strobe Setup cycles. -#define EMIF_ASYNC_CS4_CR_W_HOLD_S 17 -#define EMIF_ASYNC_CS4_CR_W_HOLD_M 0xE0000 // Write Strobe Hold cycles. -#define EMIF_ASYNC_CS4_CR_W_STROBE_S 20 -#define EMIF_ASYNC_CS4_CR_W_STROBE_M 0x3F00000 // Write Strobe Duration cycles. -#define EMIF_ASYNC_CS4_CR_W_SETUP_S 26 -#define EMIF_ASYNC_CS4_CR_W_SETUP_M 0x3C000000 // Write Strobe Setup cycles. -#define EMIF_ASYNC_CS4_CR_EW 0x40000000 // Extend Wait mode. -#define EMIF_ASYNC_CS4_CR_SS 0x80000000 // Select Strobe mode. - -//***************************************************************************** -// -// The following are defines for the bit fields in the ASYNC_CS5_CR register -// -//***************************************************************************** -#define EMIF_ASYNC_CS5_CR_ASIZE_S 0 -#define EMIF_ASYNC_CS5_CR_ASIZE_M 0x3 // Asynchronous Memory Size. -#define EMIF_ASYNC_CS5_CR_TA_S 2 -#define EMIF_ASYNC_CS5_CR_TA_M 0xC // Turn Around cycles. -#define EMIF_ASYNC_CS5_CR_R_HOLD_S 4 -#define EMIF_ASYNC_CS5_CR_R_HOLD_M 0x70 // Read Strobe Hold cycles. -#define EMIF_ASYNC_CS5_CR_R_STROBE_S 7 -#define EMIF_ASYNC_CS5_CR_R_STROBE_M 0x1F80 // Read Strobe Duration cycles. -#define EMIF_ASYNC_CS5_CR_R_SETUP_S 13 -#define EMIF_ASYNC_CS5_CR_R_SETUP_M 0x1E000 // Read Strobe Setup cycles. -#define EMIF_ASYNC_CS5_CR_W_HOLD_S 17 -#define EMIF_ASYNC_CS5_CR_W_HOLD_M 0xE0000 // Write Strobe Hold cycles. -#define EMIF_ASYNC_CS5_CR_W_STROBE_S 20 -#define EMIF_ASYNC_CS5_CR_W_STROBE_M 0x3F00000 // Write Strobe Duration cycles. -#define EMIF_ASYNC_CS5_CR_W_SETUP_S 26 -#define EMIF_ASYNC_CS5_CR_W_SETUP_M 0x3C000000 // Write Strobe Setup cycles. -#define EMIF_ASYNC_CS5_CR_EW 0x40000000 // Extend Wait mode. -#define EMIF_ASYNC_CS5_CR_SS 0x80000000 // Select Strobe mode. - -//***************************************************************************** -// -// The following are defines for the bit fields in the SDRAM_TR register -// -//***************************************************************************** -#define EMIF_SDRAM_TR_T_RRD_S 4 -#define EMIF_SDRAM_TR_T_RRD_M 0x70 // Activate to Activate timing for - // different bank. -#define EMIF_SDRAM_TR_T_RC_S 8 -#define EMIF_SDRAM_TR_T_RC_M 0xF00 // Activate to Activate timing . -#define EMIF_SDRAM_TR_T_RAS_S 12 -#define EMIF_SDRAM_TR_T_RAS_M 0xF000 // Activate to Precharge timing. -#define EMIF_SDRAM_TR_T_WR_S 16 -#define EMIF_SDRAM_TR_T_WR_M 0x70000 // Last Write to Precharge timing. -#define EMIF_SDRAM_TR_T_RCD_S 20 -#define EMIF_SDRAM_TR_T_RCD_M 0x700000 // Activate to Read/Write timing. -#define EMIF_SDRAM_TR_T_RP_S 24 -#define EMIF_SDRAM_TR_T_RP_M 0x7000000 // Precharge to Activate/Refresh - // timing. -#define EMIF_SDRAM_TR_T_RFC_S 27 -#define EMIF_SDRAM_TR_T_RFC_M 0xF8000000 // Refresh/Load Mode to - // Refresh/Activate timing - -//***************************************************************************** -// -// The following are defines for the bit fields in the TOTAL_SDRAM_AR register -// -//***************************************************************************** -#define EMIF_TOTAL_SDRAM_AR_TOTAL_SDRAM_AR_S 0 -#define EMIF_TOTAL_SDRAM_AR_TOTAL_SDRAM_AR_M 0xFFFFFFFF // Total number of VBUSP accesses - // to SDRAM. - -//***************************************************************************** -// -// The following are defines for the bit fields in the TOTAL_SDRAM_ACTR register -// -//***************************************************************************** -#define EMIF_TOTAL_SDRAM_ACTR_TOTAL_SDRAM_ACTR_S 0 -#define EMIF_TOTAL_SDRAM_ACTR_TOTAL_SDRAM_ACTR_M 0xFFFFFFFF // Number of SDRAM accesses which - // required an activate command. - -//***************************************************************************** -// -// The following are defines for the bit fields in the SDR_EXT_TMNG register -// -//***************************************************************************** -#define EMIF_SDR_EXT_TMNG_T_XS_S 0 -#define EMIF_SDR_EXT_TMNG_T_XS_M 0x1F // Self Refresh exit to new - // command timing. - -//***************************************************************************** -// -// The following are defines for the bit fields in the INT_RAW register -// -//***************************************************************************** -#define EMIF_INT_RAW_AT 0x1 // Asynchronous Timeout. -#define EMIF_INT_RAW_LT 0x2 // Line Trap. -#define EMIF_INT_RAW_WR_S 2 -#define EMIF_INT_RAW_WR_M 0x3C // Wait Rise. - -//***************************************************************************** -// -// The following are defines for the bit fields in the INT_MSK register -// -//***************************************************************************** -#define EMIF_INT_MSK_AT_MASKED 0x1 // Asynchronous Timeout. -#define EMIF_INT_MSK_LT_MASKED 0x2 // Line Trap. -#define EMIF_INT_MSK_WR_MASKED_S 2 -#define EMIF_INT_MSK_WR_MASKED_M 0x3C // Wait Rise. - -//***************************************************************************** -// -// The following are defines for the bit fields in the INT_MSK_SET register -// -//***************************************************************************** -#define EMIF_INT_MSK_SET_AT_MASK_SET 0x1 // Asynchronous Timeout. -#define EMIF_INT_MSK_SET_LT_MASK_SET 0x2 // Line Trap. -#define EMIF_INT_MSK_SET_WR_MASK_SET_S 2 -#define EMIF_INT_MSK_SET_WR_MASK_SET_M 0x3C // Wait Rise. - -//***************************************************************************** -// -// The following are defines for the bit fields in the INT_MSK_CLR register -// -//***************************************************************************** -#define EMIF_INT_MSK_CLR_AT_MASK_CLR 0x1 // Asynchronous Timeout. -#define EMIF_INT_MSK_CLR_LT_MASK_CLR 0x2 // Line Trap. -#define EMIF_INT_MSK_CLR_WR_MASK_CLR_S 2 -#define EMIF_INT_MSK_CLR_WR_MASK_CLR_M 0x3C // Wait Rise. - -//***************************************************************************** -// -// The following are defines for the bit fields in the IO_CTRL register -// -//***************************************************************************** -#define EMIF_IO_CTRL_IO_CTRL_S 0 -#define EMIF_IO_CTRL_IO_CTRL_M 0xFFFF // VTP calibration control for the - // IOs - -//***************************************************************************** -// -// The following are defines for the bit fields in the IO_STAT register -// -//***************************************************************************** -#define EMIF_IO_STAT_IO_STAT_S 0 -#define EMIF_IO_STAT_IO_STAT_M 0xFFFF // VTP calibration status of the - // IOs - -//***************************************************************************** -// -// The following are defines for the bit fields in the MODEL_REL_NUM register -// -//***************************************************************************** -#define EMIF_MODEL_REL_NUM_RELEASE_NUM_S 0 -#define EMIF_MODEL_REL_NUM_RELEASE_NUM_M 0xFF // Release Number. -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_epwm.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_epwm.h deleted file mode 100644 index f72a5bc5f3..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_epwm.h +++ /dev/null @@ -1,1248 +0,0 @@ -//########################################################################### -// -// FILE: hw_epwm.h -// -// TITLE: Definitions for the C28x EPWM registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_EPWM_H__ -#define __HW_EPWM_H__ - -//***************************************************************************** -// -// The following are defines for the EPWM register offsets -// -//***************************************************************************** -#define EPWM_O_TBCTL 0x0 // Time Base Control Register -#define EPWM_O_TBCTL2 0x1 // Time Base Control Register 2 -#define EPWM_O_TBCTR 0x4 // Time Base Counter Register -#define EPWM_O_TBSTS 0x5 // Time Base Status Register -#define EPWM_O_CMPCTL 0x8 // Counter Compare Control - // Register -#define EPWM_O_CMPCTL2 0x9 // Counter Compare Control - // Register 2 -#define EPWM_O_DBCTL 0xC // Dead-Band Generator Control - // Register -#define EPWM_O_DBCTL2 0xD // Dead-Band Generator Control - // Register 2 -#define EPWM_O_AQCTL 0x10 // Action Qualifier Control - // Register -#define EPWM_O_AQTSRCSEL 0x11 // Action Qualifier Trigger Event - // Source Select Register -#define EPWM_O_PCCTL 0x14 // PWM Chopper Control Register -#define EPWM_O_HRCNFG 0x20 // HRPWM Configuration Register -#define EPWM_O_HRPWR 0x21 // HRPWM Power Register -#define EPWM_O_HRMSTEP 0x26 // HRPWM MEP Step Register -#define EPWM_O_HRPCTL 0x2D // High Resolution Period Control - // Register -#define EPWM_O_GLDCTL 0x34 // Global PWM Load Control - // Register -#define EPWM_O_GLDCFG 0x35 // Global PWM Load Config Register -#define EPWM_O_XLINK 0x38 // EPWMx Link Register -#define EPWM_O_AQCTLA 0x40 // Action Qualifier Control - // Register For Output A -#define EPWM_O_AQCTLA2 0x41 // Additional Action Qualifier - // Control Register For Output A -#define EPWM_O_AQCTLB 0x42 // Action Qualifier Control - // Register For Output B -#define EPWM_O_AQCTLB2 0x43 // Additional Action Qualifier - // Control Register For Output B -#define EPWM_O_AQSFRC 0x47 // Action Qualifier Software Force - // Register -#define EPWM_O_AQCSFRC 0x49 // Action Qualifier Continuous S/W - // Force Register -#define EPWM_O_DBREDHR 0x50 // Dead-Band Generator Rising Edge - // Delay High Resolution Mirror - // Register -#define EPWM_O_DBRED 0x51 // Dead-Band Generator Rising Edge - // Delay High Resolution Mirror - // Register -#define EPWM_O_DBFEDHR 0x52 // Dead-Band Generator Falling - // Edge Delay High Resolution - // Register -#define EPWM_O_DBFED 0x53 // Dead-Band Generator Falling - // Edge Delay Count Register -#define EPWM_O_TBPHS 0x60 // Time Base Phase High -#define EPWM_O_TBPRDHR 0x62 // Time Base Period High - // Resolution Register -#define EPWM_O_TBPRD 0x63 // Time Base Period Register -#define EPWM_O_CMPA 0x6A // Counter Compare A Register -#define EPWM_O_CMPB 0x6C // Compare B Register -#define EPWM_O_CMPC 0x6F // Counter Compare C Register -#define EPWM_O_CMPD 0x71 // Counter Compare D Register -#define EPWM_O_GLDCTL2 0x74 // Global PWM Load Control - // Register 2 -#define EPWM_O_TZSEL 0x80 // Trip Zone Select Register -#define EPWM_O_TZDCSEL 0x82 // Trip Zone Digital Comparator - // Select Register -#define EPWM_O_TZCTL 0x84 // Trip Zone Control Register -#define EPWM_O_TZCTL2 0x85 // Additional Trip Zone Control - // Register -#define EPWM_O_TZCTLDCA 0x86 // Trip Zone Control Register - // Digital Compare A -#define EPWM_O_TZCTLDCB 0x87 // Trip Zone Control Register - // Digital Compare B -#define EPWM_O_TZEINT 0x8D // Trip Zone Enable Interrupt - // Register -#define EPWM_O_TZFLG 0x93 // Trip Zone Flag Register -#define EPWM_O_TZCBCFLG 0x94 // Trip Zone CBC Flag Register -#define EPWM_O_TZOSTFLG 0x95 // Trip Zone OST Flag Register -#define EPWM_O_TZCLR 0x97 // Trip Zone Clear Register -#define EPWM_O_TZCBCCLR 0x98 // Trip Zone CBC Clear Register -#define EPWM_O_TZOSTCLR 0x99 // Trip Zone OST Clear Register -#define EPWM_O_TZFRC 0x9B // Trip Zone Force Register -#define EPWM_O_ETSEL 0xA4 // Event Trigger Selection - // Register -#define EPWM_O_ETPS 0xA6 // Event Trigger Pre-Scale - // Register -#define EPWM_O_ETFLG 0xA8 // Event Trigger Flag Register -#define EPWM_O_ETCLR 0xAA // Event Trigger Clear Register -#define EPWM_O_ETFRC 0xAC // Event Trigger Force Register -#define EPWM_O_ETINTPS 0xAE // Event-Trigger Interrupt - // Pre-Scale Register -#define EPWM_O_ETSOCPS 0xB0 // Event-Trigger SOC Pre-Scale - // Register -#define EPWM_O_ETCNTINITCTL 0xB2 // Event-Trigger Counter - // Initialization Control - // Register -#define EPWM_O_ETCNTINIT 0xB4 // Event-Trigger Counter - // Initialization Register -#define EPWM_O_DCTRIPSEL 0xC0 // Digital Compare Trip Select - // Register -#define EPWM_O_DCACTL 0xC3 // Digital Compare A Control - // Register -#define EPWM_O_DCBCTL 0xC4 // Digital Compare B Control - // Register -#define EPWM_O_DCFCTL 0xC7 // Digital Compare Filter Control - // Register -#define EPWM_O_DCCAPCTL 0xC8 // Digital Compare Capture Control - // Register -#define EPWM_O_DCFOFFSET 0xC9 // Digital Compare Filter Offset - // Register -#define EPWM_O_DCFOFFSETCNT 0xCA // Digital Compare Filter Offset - // Counter Register -#define EPWM_O_DCFWINDOW 0xCB // Digital Compare Filter Window - // Register -#define EPWM_O_DCFWINDOWCNT 0xCC // Digital Compare Filter Window - // Counter Register -#define EPWM_O_DCCAP 0xCF // Digital Compare Counter Capture - // Register -#define EPWM_O_DCAHTRIPSEL 0xD2 // Digital Compare AH Trip Select -#define EPWM_O_DCALTRIPSEL 0xD3 // Digital Compare AL Trip Select -#define EPWM_O_DCBHTRIPSEL 0xD4 // Digital Compare BH Trip Select -#define EPWM_O_DCBLTRIPSEL 0xD5 // Digital Compare BL Trip Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBCTL register -// -//***************************************************************************** -#define EPWM_TBCTL_CTRMODE_S 0 -#define EPWM_TBCTL_CTRMODE_M 0x3 // Counter Mode -#define EPWM_TBCTL_PHSEN 0x4 // Phase Load Enable -#define EPWM_TBCTL_PRDLD 0x8 // Active Period Load -#define EPWM_TBCTL_SYNCOSEL_S 4 -#define EPWM_TBCTL_SYNCOSEL_M 0x30 // Sync Output Select -#define EPWM_TBCTL_SWFSYNC 0x40 // Software Force Sync Pulse -#define EPWM_TBCTL_HSPCLKDIV_S 7 -#define EPWM_TBCTL_HSPCLKDIV_M 0x380 // High Speed TBCLK Pre-scaler -#define EPWM_TBCTL_CLKDIV_S 10 -#define EPWM_TBCTL_CLKDIV_M 0x1C00 // Time Base Clock Pre-scaler -#define EPWM_TBCTL_PHSDIR 0x2000 // Phase Direction Bit -#define EPWM_TBCTL_FREE_SOFT_S 14 -#define EPWM_TBCTL_FREE_SOFT_M 0xC000 // Emulation Mode Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBCTL2 register -// -//***************************************************************************** -#define EPWM_TBCTL2_SELFCLRTRREM 0x20 // Self clear Translator reminder -#define EPWM_TBCTL2_OSHTSYNCMODE 0x40 // One shot sync mode -#define EPWM_TBCTL2_OSHTSYNC 0x80 // One shot sync -#define EPWM_TBCTL2_SYNCOSELX_S 12 -#define EPWM_TBCTL2_SYNCOSELX_M 0x3000 // Syncout selection -#define EPWM_TBCTL2_PRDLDSYNC_S 14 -#define EPWM_TBCTL2_PRDLDSYNC_M 0xC000 // PRD Shadow to Active Load on - // SYNC Event - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBCTR register -// -//***************************************************************************** -#define EPWM_TBCTR_TBCTR_S 0 -#define EPWM_TBCTR_TBCTR_M 0xFFFF // Counter Value - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBSTS register -// -//***************************************************************************** -#define EPWM_TBSTS_CTRDIR 0x1 // Counter Direction Status -#define EPWM_TBSTS_SYNCI 0x2 // External Input Sync Status -#define EPWM_TBSTS_CTRMAX 0x4 // Counter Max Latched Status - -//***************************************************************************** -// -// The following are defines for the bit fields in the CMPCTL register -// -//***************************************************************************** -#define EPWM_CMPCTL_LOADAMODE_S 0 -#define EPWM_CMPCTL_LOADAMODE_M 0x3 // Active Compare A Load -#define EPWM_CMPCTL_LOADBMODE_S 2 -#define EPWM_CMPCTL_LOADBMODE_M 0xC // Active Compare B Load -#define EPWM_CMPCTL_SHDWAMODE 0x10 // Compare A Register Block - // Operating Mode -#define EPWM_CMPCTL_SHDWBMODE 0x40 // Compare B Register Block - // Operating Mode -#define EPWM_CMPCTL_SHDWAFULL 0x100 // Compare A Shadow Register Full - // Status -#define EPWM_CMPCTL_SHDWBFULL 0x200 // Compare B Shadow Register Full - // Status -#define EPWM_CMPCTL_LOADASYNC_S 10 -#define EPWM_CMPCTL_LOADASYNC_M 0xC00 // Active Compare A Load on SYNC -#define EPWM_CMPCTL_LOADBSYNC_S 12 -#define EPWM_CMPCTL_LOADBSYNC_M 0x3000 // Active Compare B Load on SYNC - -//***************************************************************************** -// -// The following are defines for the bit fields in the CMPCTL2 register -// -//***************************************************************************** -#define EPWM_CMPCTL2_LOADCMODE_S 0 -#define EPWM_CMPCTL2_LOADCMODE_M 0x3 // Active Compare C Load -#define EPWM_CMPCTL2_LOADDMODE_S 2 -#define EPWM_CMPCTL2_LOADDMODE_M 0xC // Active Compare D load -#define EPWM_CMPCTL2_SHDWCMODE 0x10 // Compare C Block Operating Mode -#define EPWM_CMPCTL2_SHDWDMODE 0x40 // Compare D Block Operating Mode -#define EPWM_CMPCTL2_LOADCSYNC_S 10 -#define EPWM_CMPCTL2_LOADCSYNC_M 0xC00 // Active Compare C Load on SYNC -#define EPWM_CMPCTL2_LOADDSYNC_S 12 -#define EPWM_CMPCTL2_LOADDSYNC_M 0x3000 // Active Compare D Load on SYNC - -//***************************************************************************** -// -// The following are defines for the bit fields in the DBCTL register -// -//***************************************************************************** -#define EPWM_DBCTL_OUT_MODE_S 0 -#define EPWM_DBCTL_OUT_MODE_M 0x3 // Dead Band Output Mode Control -#define EPWM_DBCTL_POLSEL_S 2 -#define EPWM_DBCTL_POLSEL_M 0xC // Polarity Select Control -#define EPWM_DBCTL_IN_MODE_S 4 -#define EPWM_DBCTL_IN_MODE_M 0x30 // Dead Band Input Select Mode - // Control -#define EPWM_DBCTL_LOADREDMODE_S 6 -#define EPWM_DBCTL_LOADREDMODE_M 0xC0 // Active DBRED Load Mode -#define EPWM_DBCTL_LOADFEDMODE_S 8 -#define EPWM_DBCTL_LOADFEDMODE_M 0x300 // Active DBFED Load Mode -#define EPWM_DBCTL_SHDWDBREDMODE 0x400 // DBRED Block Operating Mode -#define EPWM_DBCTL_SHDWDBFEDMODE 0x800 // DBFED Block Operating Mode -#define EPWM_DBCTL_OUTSWAP_S 12 -#define EPWM_DBCTL_OUTSWAP_M 0x3000 // Dead Band Output Swap Control -#define EPWM_DBCTL_DEDB_MODE 0x4000 // Dead Band Dual-Edge B Mode - // Control -#define EPWM_DBCTL_HALFCYCLE 0x8000 // Half Cycle Clocking Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the DBCTL2 register -// -//***************************************************************************** -#define EPWM_DBCTL2_LOADDBCTLMODE_S 0 -#define EPWM_DBCTL2_LOADDBCTLMODE_M 0x3 // DBCTL Load from Shadow Mode - // Select -#define EPWM_DBCTL2_SHDWDBCTLMODE 0x4 // DBCTL Load mode Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQCTL register -// -//***************************************************************************** -#define EPWM_AQCTL_LDAQAMODE_S 0 -#define EPWM_AQCTL_LDAQAMODE_M 0x3 // Action Qualifier A Load Select -#define EPWM_AQCTL_LDAQBMODE_S 2 -#define EPWM_AQCTL_LDAQBMODE_M 0xC // Action Qualifier B Load Select -#define EPWM_AQCTL_SHDWAQAMODE 0x10 // Action Qualifer A Operating - // Mode -#define EPWM_AQCTL_SHDWAQBMODE 0x40 // Action Qualifier B Operating - // Mode -#define EPWM_AQCTL_LDAQASYNC_S 8 -#define EPWM_AQCTL_LDAQASYNC_M 0x300 // AQCTLA Register Load on SYNC -#define EPWM_AQCTL_LDAQBSYNC_S 10 -#define EPWM_AQCTL_LDAQBSYNC_M 0xC00 // AQCTLB Register Load on SYNC - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQTSRCSEL register -// -//***************************************************************************** -#define EPWM_AQTSRCSEL_T1SEL_S 0 -#define EPWM_AQTSRCSEL_T1SEL_M 0xF // T1 Event Source Select Bits -#define EPWM_AQTSRCSEL_T2SEL_S 4 -#define EPWM_AQTSRCSEL_T2SEL_M 0xF0 // T2 Event Source Select Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the PCCTL register -// -//***************************************************************************** -#define EPWM_PCCTL_CHPEN 0x1 // PWM chopping enable -#define EPWM_PCCTL_OSHTWTH_S 1 -#define EPWM_PCCTL_OSHTWTH_M 0x1E // One-shot pulse width -#define EPWM_PCCTL_CHPFREQ_S 5 -#define EPWM_PCCTL_CHPFREQ_M 0xE0 // Chopping clock frequency -#define EPWM_PCCTL_CHPDUTY_S 8 -#define EPWM_PCCTL_CHPDUTY_M 0x700 // Chopping clock Duty cycle - -//***************************************************************************** -// -// The following are defines for the bit fields in the HRCNFG register -// -//***************************************************************************** -#define EPWM_HRCNFG_EDGMODE_S 0 -#define EPWM_HRCNFG_EDGMODE_M 0x3 // ePWMxA Edge Mode Select Bits -#define EPWM_HRCNFG_CTLMODE 0x4 // ePWMxA Control Mode Select Bits -#define EPWM_HRCNFG_HRLOAD_S 3 -#define EPWM_HRCNFG_HRLOAD_M 0x18 // ePWMxA Shadow Mode Select Bits -#define EPWM_HRCNFG_SELOUTB 0x20 // EPWMB Output Selection Bit -#define EPWM_HRCNFG_AUTOCONV 0x40 // Autoconversion Bit -#define EPWM_HRCNFG_SWAPAB 0x80 // Swap EPWMA and EPWMB Outputs - // Bit -#define EPWM_HRCNFG_EDGMODEB_S 8 -#define EPWM_HRCNFG_EDGMODEB_M 0x300 // ePWMxB Edge Mode Select Bits -#define EPWM_HRCNFG_CTLMODEB 0x400 // ePWMxB Control Mode Select Bits -#define EPWM_HRCNFG_HRLOADB_S 11 -#define EPWM_HRCNFG_HRLOADB_M 0x1800 // ePWMxB Shadow Mode Select Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the HRPWR register -// -//***************************************************************************** -#define EPWM_HRPWR_CALPWRON 0x8000 // Calibration Power On - -//***************************************************************************** -// -// The following are defines for the bit fields in the HRMSTEP register -// -//***************************************************************************** -#define EPWM_HRMSTEP_HRMSTEP_S 0 -#define EPWM_HRMSTEP_HRMSTEP_M 0xFF // High Resolution Micro Step - // Value - -//***************************************************************************** -// -// The following are defines for the bit fields in the HRPCTL register -// -//***************************************************************************** -#define EPWM_HRPCTL_HRPE 0x1 // High Resolution Period Enable -#define EPWM_HRPCTL_TBPHSHRLOADE 0x4 // TBPHSHR Load Enable -#define EPWM_HRPCTL_PWMSYNCSELX_S 4 -#define EPWM_HRPCTL_PWMSYNCSELX_M 0x70 // PWMSYNCX Source Select Bit: - -//***************************************************************************** -// -// The following are defines for the bit fields in the GLDCTL register -// -//***************************************************************************** -#define EPWM_GLDCTL_GLD 0x1 // Global Shadow to Active load - // event control -#define EPWM_GLDCTL_GLDMODE_S 1 -#define EPWM_GLDCTL_GLDMODE_M 0x1E // Shadow to Active Global Load - // Pulse Selection -#define EPWM_GLDCTL_OSHTMODE 0x20 // One Shot Load mode control bit -#define EPWM_GLDCTL_GLDPRD_S 7 -#define EPWM_GLDCTL_GLDPRD_M 0x380 // Global Reload Strobe Period - // Select Register -#define EPWM_GLDCTL_GLDCNT_S 10 -#define EPWM_GLDCTL_GLDCNT_M 0x1C00 // Global Reload Strobe Counter - // Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the GLDCFG register -// -//***************************************************************************** -#define EPWM_GLDCFG_TBPRD_TBPRDHR 0x1 // Global load event configuration - // for TBPRD:TBPRDHR -#define EPWM_GLDCFG_CMPA_CMPAHR 0x2 // Global load event configuration - // for CMPA:CMPAHR -#define EPWM_GLDCFG_CMPB_CMPBHR 0x4 // Global load event configuration - // for CMPB:CMPBHR -#define EPWM_GLDCFG_CMPC 0x8 // Global load event configuration - // for CMPC -#define EPWM_GLDCFG_CMPD 0x10 // Global load event configuration - // for CMPD -#define EPWM_GLDCFG_DBRED_DBREDHR 0x20 // Global load event configuration - // for DBRED:DBREDHR -#define EPWM_GLDCFG_DBFED_DBFEDHR 0x40 // Global load event configuration - // for DBFED:DBFEDHR -#define EPWM_GLDCFG_DBCTL 0x80 // Global load event configuration - // for DBCTL -#define EPWM_GLDCFG_AQCTLA_AQCTLA2 0x100 // Global load event configuration - // for AQCTLA/A2 -#define EPWM_GLDCFG_AQCTLB_AQCTLB2 0x200 // Global load event configuration - // for AQCTLB/B2 -#define EPWM_GLDCFG_AQCSFRC 0x400 // Global load event configuration - // for AQCSFRC - -//***************************************************************************** -// -// The following are defines for the bit fields in the EPWMXLINK register -// -//***************************************************************************** -#define EPWM_XLINK_TBPRDLINK_S 0 -#define EPWM_XLINK_TBPRDLINK_M 0xF // TBPRD:TBPRDHR Link -#define EPWM_XLINK_CMPALINK_S 4 -#define EPWM_XLINK_CMPALINK_M 0xF0 // CMPA:CMPAHR Link -#define EPWM_XLINK_CMPBLINK_S 8 -#define EPWM_XLINK_CMPBLINK_M 0xF00 // CMPB:CMPBHR Link -#define EPWM_XLINK_CMPCLINK_S 12 -#define EPWM_XLINK_CMPCLINK_M 0xF000 // CMPC Link -#define EPWM_XLINK_CMPDLINK_S 16 -#define EPWM_XLINK_CMPDLINK_M 0xF0000 // CMPD Link -#define EPWM_XLINK_GLDCTL2LINK_S 28 -#define EPWM_XLINK_GLDCTL2LINK_M 0xF0000000 // GLDCTL2 Link - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQCTLA register -// -//***************************************************************************** -#define EPWM_AQCTLA_ZRO_S 0 -#define EPWM_AQCTLA_ZRO_M 0x3 // Action Counter = Zero -#define EPWM_AQCTLA_PRD_S 2 -#define EPWM_AQCTLA_PRD_M 0xC // Action Counter = Period -#define EPWM_AQCTLA_CAU_S 4 -#define EPWM_AQCTLA_CAU_M 0x30 // Action Counter = Compare A Up -#define EPWM_AQCTLA_CAD_S 6 -#define EPWM_AQCTLA_CAD_M 0xC0 // Action Counter = Compare A Down -#define EPWM_AQCTLA_CBU_S 8 -#define EPWM_AQCTLA_CBU_M 0x300 // Action Counter = Compare B Up -#define EPWM_AQCTLA_CBD_S 10 -#define EPWM_AQCTLA_CBD_M 0xC00 // Action Counter = Compare B Down - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQCTLA2 register -// -//***************************************************************************** -#define EPWM_AQCTLA2_T1U_S 0 -#define EPWM_AQCTLA2_T1U_M 0x3 // Action when event occurs on T1 - // in UP-Count -#define EPWM_AQCTLA2_T1D_S 2 -#define EPWM_AQCTLA2_T1D_M 0xC // Action when event occurs on T1 - // in DOWN-Count -#define EPWM_AQCTLA2_T2U_S 4 -#define EPWM_AQCTLA2_T2U_M 0x30 // Action when event occurs on T2 - // in UP-Count -#define EPWM_AQCTLA2_T2D_S 6 -#define EPWM_AQCTLA2_T2D_M 0xC0 // Action when event occurs on T2 - // in DOWN-Count - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQCTLB register -// -//***************************************************************************** -#define EPWM_AQCTLB_ZRO_S 0 -#define EPWM_AQCTLB_ZRO_M 0x3 // Action Counter = Zero -#define EPWM_AQCTLB_PRD_S 2 -#define EPWM_AQCTLB_PRD_M 0xC // Action Counter = Period -#define EPWM_AQCTLB_CAU_S 4 -#define EPWM_AQCTLB_CAU_M 0x30 // Action Counter = Compare A Up -#define EPWM_AQCTLB_CAD_S 6 -#define EPWM_AQCTLB_CAD_M 0xC0 // Action Counter = Compare A Down -#define EPWM_AQCTLB_CBU_S 8 -#define EPWM_AQCTLB_CBU_M 0x300 // Action Counter = Compare B Up -#define EPWM_AQCTLB_CBD_S 10 -#define EPWM_AQCTLB_CBD_M 0xC00 // Action Counter = Compare B Down - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQCTLB2 register -// -//***************************************************************************** -#define EPWM_AQCTLB2_T1U_S 0 -#define EPWM_AQCTLB2_T1U_M 0x3 // Action when event occurs on T1 - // in UP-Count -#define EPWM_AQCTLB2_T1D_S 2 -#define EPWM_AQCTLB2_T1D_M 0xC // Action when event occurs on T1 - // in DOWN-Count -#define EPWM_AQCTLB2_T2U_S 4 -#define EPWM_AQCTLB2_T2U_M 0x30 // Action when event occurs on T2 - // in UP-Count -#define EPWM_AQCTLB2_T2D_S 6 -#define EPWM_AQCTLB2_T2D_M 0xC0 // Action when event occurs on T2 - // in DOWN-Count - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQSFRC register -// -//***************************************************************************** -#define EPWM_AQSFRC_ACTSFA_S 0 -#define EPWM_AQSFRC_ACTSFA_M 0x3 // Action when One-time SW Force A - // Invoked -#define EPWM_AQSFRC_OTSFA 0x4 // One-time SW Force A Output -#define EPWM_AQSFRC_ACTSFB_S 3 -#define EPWM_AQSFRC_ACTSFB_M 0x18 // Action when One-time SW Force B - // Invoked -#define EPWM_AQSFRC_OTSFB 0x20 // One-time SW Force A Output -#define EPWM_AQSFRC_RLDCSF_S 6 -#define EPWM_AQSFRC_RLDCSF_M 0xC0 // Reload from Shadow Options - -//***************************************************************************** -// -// The following are defines for the bit fields in the AQCSFRC register -// -//***************************************************************************** -#define EPWM_AQCSFRC_CSFA_S 0 -#define EPWM_AQCSFRC_CSFA_M 0x3 // Continuous Software Force on - // output A -#define EPWM_AQCSFRC_CSFB_S 2 -#define EPWM_AQCSFRC_CSFB_M 0xC // Continuous Software Force on - // output B - -//***************************************************************************** -// -// The following are defines for the bit fields in the DBREDHR register -// -//***************************************************************************** -#define EPWM_DBREDHR_DBREDHR_S 9 -#define EPWM_DBREDHR_DBREDHR_M 0xFE00 // DBREDHR High Resolution Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the DBRED register -// -//***************************************************************************** -#define EPWM_DBRED_DBRED_S 0 -#define EPWM_DBRED_DBRED_M 0xFFFF // Rising edge delay value - -//***************************************************************************** -// -// The following are defines for the bit fields in the DBFEDHR register -// -//***************************************************************************** -#define EPWM_DBFEDHR_DBFEDHR_S 9 -#define EPWM_DBFEDHR_DBFEDHR_M 0xFE00 // DBFEDHR High Resolution Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the DBFED register -// -//***************************************************************************** -#define EPWM_DBFED_DBFED_S 0 -#define EPWM_DBFED_DBFED_M 0xFFFF // Falling edge delay value - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBPHS register -// -//***************************************************************************** -#define EPWM_TBPHS_TBPHSHR_S 0 -#define EPWM_TBPHS_TBPHSHR_M 0xFFFF // Extension Register for HRPWM - // Phase (8-bits) -#define EPWM_TBPHS_TBPHS_S 16 -#define EPWM_TBPHS_TBPHS_M 0xFFFF0000 // Phase Offset Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBPRDHR register -// -//***************************************************************************** -#define EPWM_TBPRDHR_TBPRDHR_S 0 -#define EPWM_TBPRDHR_TBPRDHR_M 0xFFFF // High res Time base period - // register - -//***************************************************************************** -// -// The following are defines for the bit fields in the TBPRD register -// -//***************************************************************************** -#define EPWM_TBPRD_TBPRD_S 0 -#define EPWM_TBPRD_TBPRD_M 0xFFFF // Time base period register - -//***************************************************************************** -// -// The following are defines for the bit fields in the CMPA register -// -//***************************************************************************** -#define EPWM_CMPA_CMPAHR_S 0 -#define EPWM_CMPA_CMPAHR_M 0xFFFF // Compare A HRPWM Extension - // Register -#define EPWM_CMPA_CMPA_S 16 -#define EPWM_CMPA_CMPA_M 0xFFFF0000 // Compare A Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the CMPB register -// -//***************************************************************************** -#define EPWM_CMPB_CMPB_S 16 -#define EPWM_CMPB_CMPB_M 0xFFFF0000 // Compare B Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the CMPC register -// -//***************************************************************************** -#define EPWM_CMPC_CMPC_S 0 -#define EPWM_CMPC_CMPC_M 0xFFFF // Compare C Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the CMPD register -// -//***************************************************************************** -#define EPWM_CMPD_CMPD_S 0 -#define EPWM_CMPD_CMPD_M 0xFFFF // Compare D Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the GLDCTL2 register -// -//***************************************************************************** -#define EPWM_GLDCTL2_OSHTLD 0x1 // Enable reload event in one shot - // mode -#define EPWM_GLDCTL2_GFRCLD 0x2 // Force reload event in one shot - // mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZSEL register -// -//***************************************************************************** -#define EPWM_TZSEL_CBC1 0x1 // TZ1 CBC select -#define EPWM_TZSEL_CBC2 0x2 // TZ2 CBC select -#define EPWM_TZSEL_CBC3 0x4 // TZ3 CBC select -#define EPWM_TZSEL_CBC4 0x8 // TZ4 CBC select -#define EPWM_TZSEL_CBC5 0x10 // TZ5 CBC select -#define EPWM_TZSEL_CBC6 0x20 // TZ6 CBC select -#define EPWM_TZSEL_DCAEVT2 0x40 // DCAEVT2 CBC select -#define EPWM_TZSEL_DCBEVT2 0x80 // DCBEVT2 CBC select -#define EPWM_TZSEL_OSHT1 0x100 // One-shot TZ1 select -#define EPWM_TZSEL_OSHT2 0x200 // One-shot TZ2 select -#define EPWM_TZSEL_OSHT3 0x400 // One-shot TZ3 select -#define EPWM_TZSEL_OSHT4 0x800 // One-shot TZ4 select -#define EPWM_TZSEL_OSHT5 0x1000 // One-shot TZ5 select -#define EPWM_TZSEL_OSHT6 0x2000 // One-shot TZ6 select -#define EPWM_TZSEL_DCAEVT1 0x4000 // One-shot DCAEVT1 select -#define EPWM_TZSEL_DCBEVT1 0x8000 // One-shot DCBEVT1 select - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZDCSEL register -// -//***************************************************************************** -#define EPWM_TZDCSEL_DCAEVT1_S 0 -#define EPWM_TZDCSEL_DCAEVT1_M 0x7 // Digital Compare Output A Event - // 1 -#define EPWM_TZDCSEL_DCAEVT2_S 3 -#define EPWM_TZDCSEL_DCAEVT2_M 0x38 // Digital Compare Output A Event - // 2 -#define EPWM_TZDCSEL_DCBEVT1_S 6 -#define EPWM_TZDCSEL_DCBEVT1_M 0x1C0 // Digital Compare Output B Event - // 1 -#define EPWM_TZDCSEL_DCBEVT2_S 9 -#define EPWM_TZDCSEL_DCBEVT2_M 0xE00 // Digital Compare Output B Event - // 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCTL register -// -//***************************************************************************** -#define EPWM_TZCTL_TZA_S 0 -#define EPWM_TZCTL_TZA_M 0x3 // TZ1 to TZ6 Trip Action On - // EPWMxA -#define EPWM_TZCTL_TZB_S 2 -#define EPWM_TZCTL_TZB_M 0xC // TZ1 to TZ6 Trip Action On - // EPWMxB -#define EPWM_TZCTL_DCAEVT1_S 4 -#define EPWM_TZCTL_DCAEVT1_M 0x30 // EPWMxA action on DCAEVT1 -#define EPWM_TZCTL_DCAEVT2_S 6 -#define EPWM_TZCTL_DCAEVT2_M 0xC0 // EPWMxA action on DCAEVT2 -#define EPWM_TZCTL_DCBEVT1_S 8 -#define EPWM_TZCTL_DCBEVT1_M 0x300 // EPWMxB action on DCBEVT1 -#define EPWM_TZCTL_DCBEVT2_S 10 -#define EPWM_TZCTL_DCBEVT2_M 0xC00 // EPWMxB action on DCBEVT2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCTL2 register -// -//***************************************************************************** -#define EPWM_TZCTL2_TZAU_S 0 -#define EPWM_TZCTL2_TZAU_M 0x7 // Trip Action On EPWMxA while - // Count direction is UP -#define EPWM_TZCTL2_TZAD_S 3 -#define EPWM_TZCTL2_TZAD_M 0x38 // Trip Action On EPWMxA while - // Count direction is DOWN -#define EPWM_TZCTL2_TZBU_S 6 -#define EPWM_TZCTL2_TZBU_M 0x1C0 // Trip Action On EPWMxB while - // Count direction is UP -#define EPWM_TZCTL2_TZBD_S 9 -#define EPWM_TZCTL2_TZBD_M 0xE00 // Trip Action On EPWMxB while - // Count direction is DOWN -#define EPWM_TZCTL2_ETZE 0x8000 // TZCTL2 Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCTLDCA register -// -//***************************************************************************** -#define EPWM_TZCTLDCA_DCAEVT1U_S 0 -#define EPWM_TZCTLDCA_DCAEVT1U_M 0x7 // DCAEVT1 Action On EPWMxA while - // Count direction is UP -#define EPWM_TZCTLDCA_DCAEVT1D_S 3 -#define EPWM_TZCTLDCA_DCAEVT1D_M 0x38 // DCAEVT1 Action On EPWMxA while - // Count direction is DOWN -#define EPWM_TZCTLDCA_DCAEVT2U_S 6 -#define EPWM_TZCTLDCA_DCAEVT2U_M 0x1C0 // DCAEVT2 Action On EPWMxA while - // Count direction is UP -#define EPWM_TZCTLDCA_DCAEVT2D_S 9 -#define EPWM_TZCTLDCA_DCAEVT2D_M 0xE00 // DCAEVT2 Action On EPWMxA while - // Count direction is DOWN - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCTLDCB register -// -//***************************************************************************** -#define EPWM_TZCTLDCB_DCBEVT1U_S 0 -#define EPWM_TZCTLDCB_DCBEVT1U_M 0x7 // DCBEVT1 Action On EPWMxA while - // Count direction is UP -#define EPWM_TZCTLDCB_DCBEVT1D_S 3 -#define EPWM_TZCTLDCB_DCBEVT1D_M 0x38 // DCBEVT1 Action On EPWMxA while - // Count direction is DOWN -#define EPWM_TZCTLDCB_DCBEVT2U_S 6 -#define EPWM_TZCTLDCB_DCBEVT2U_M 0x1C0 // DCBEVT2 Action On EPWMxA while - // Count direction is UP -#define EPWM_TZCTLDCB_DCBEVT2D_S 9 -#define EPWM_TZCTLDCB_DCBEVT2D_M 0xE00 // DCBEVT2 Action On EPWMxA while - // Count direction is DOWN - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZEINT register -// -//***************************************************************************** -#define EPWM_TZEINT_CBC 0x2 // Trip Zones Cycle By Cycle Int - // Enable -#define EPWM_TZEINT_OST 0x4 // Trip Zones One Shot Int Enable -#define EPWM_TZEINT_DCAEVT1 0x8 // Digital Compare A Event 1 Int - // Enable -#define EPWM_TZEINT_DCAEVT2 0x10 // Digital Compare A Event 2 Int - // Enable -#define EPWM_TZEINT_DCBEVT1 0x20 // Digital Compare B Event 1 Int - // Enable -#define EPWM_TZEINT_DCBEVT2 0x40 // Digital Compare B Event 2 Int - // Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZFLG register -// -//***************************************************************************** -#define EPWM_TZFLG_INT 0x1 // Global Int Status Flag -#define EPWM_TZFLG_CBC 0x2 // Trip Zones Cycle By Cycle Flag -#define EPWM_TZFLG_OST 0x4 // Trip Zones One Shot Flag -#define EPWM_TZFLG_DCAEVT1 0x8 // Digital Compare A Event 1 Flag -#define EPWM_TZFLG_DCAEVT2 0x10 // Digital Compare A Event 2 Flag -#define EPWM_TZFLG_DCBEVT1 0x20 // Digital Compare B Event 1 Flag -#define EPWM_TZFLG_DCBEVT2 0x40 // Digital Compare B Event 2 Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCBCFLG register -// -//***************************************************************************** -#define EPWM_TZCBCFLG_CBC1 0x1 // Latched Status Flag for CBC1 - // Trip Latch -#define EPWM_TZCBCFLG_CBC2 0x2 // Latched Status Flag for CBC2 - // Trip Latch -#define EPWM_TZCBCFLG_CBC3 0x4 // Latched Status Flag for CBC3 - // Trip Latch -#define EPWM_TZCBCFLG_CBC4 0x8 // Latched Status Flag for CBC4 - // Trip Latch -#define EPWM_TZCBCFLG_CBC5 0x10 // Latched Status Flag for CBC5 - // Trip Latch -#define EPWM_TZCBCFLG_CBC6 0x20 // Latched Status Flag for CBC6 - // Trip Latch -#define EPWM_TZCBCFLG_DCAEVT2 0x40 // Latched Status Flag for Digital - // Compare Output A Event 2 -#define EPWM_TZCBCFLG_DCBEVT2 0x80 // Latched Status Flag for Digital - // Compare Output B Event 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZOSTFLG register -// -//***************************************************************************** -#define EPWM_TZOSTFLG_OST1 0x1 // Latched Status Flag for OST1 - // Trip Latch -#define EPWM_TZOSTFLG_OST2 0x2 // Latched Status Flag for OST2 - // Trip Latch -#define EPWM_TZOSTFLG_OST3 0x4 // Latched Status Flag for OST3 - // Trip Latch -#define EPWM_TZOSTFLG_OST4 0x8 // Latched Status Flag for OST4 - // Trip Latch -#define EPWM_TZOSTFLG_OST5 0x10 // Latched Status Flag for OST5 - // Trip Latch -#define EPWM_TZOSTFLG_OST6 0x20 // Latched Status Flag for OST6 - // Trip Latch -#define EPWM_TZOSTFLG_DCAEVT2 0x40 // Latched Status Flag for Digital - // Compare Output A Event 1 -#define EPWM_TZOSTFLG_DCBEVT2 0x80 // Latched Status Flag for Digital - // Compare Output B Event 1 - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCLR register -// -//***************************************************************************** -#define EPWM_TZCLR_INT 0x1 // Global Interrupt Clear Flag -#define EPWM_TZCLR_CBC 0x2 // Cycle-By-Cycle Flag Clear -#define EPWM_TZCLR_OST 0x4 // One-Shot Flag Clear -#define EPWM_TZCLR_DCAEVT1 0x8 // DCAVET1 Flag Clear -#define EPWM_TZCLR_DCAEVT2 0x10 // DCAEVT2 Flag Clear -#define EPWM_TZCLR_DCBEVT1 0x20 // DCBEVT1 Flag Clear -#define EPWM_TZCLR_DCBEVT2 0x40 // DCBEVT2 Flag Clear -#define EPWM_TZCLR_CBCPULSE_S 14 -#define EPWM_TZCLR_CBCPULSE_M 0xC000 // Clear Pulse for CBC Trip Latch - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZCBCCLR register -// -//***************************************************************************** -#define EPWM_TZCBCCLR_CBC1 0x1 // Clear Flag for Cycle-By-Cycle - // (CBC1) Trip Latch -#define EPWM_TZCBCCLR_CBC2 0x2 // Clear Flag for Cycle-By-Cycle - // (CBC2) Trip Latch -#define EPWM_TZCBCCLR_CBC3 0x4 // Clear Flag for Cycle-By-Cycle - // (CBC3) Trip Latch -#define EPWM_TZCBCCLR_CBC4 0x8 // Clear Flag for Cycle-By-Cycle - // (CBC4) Trip Latch -#define EPWM_TZCBCCLR_CBC5 0x10 // Clear Flag for Cycle-By-Cycle - // (CBC5) Trip Latch -#define EPWM_TZCBCCLR_CBC6 0x20 // Clear Flag for Cycle-By-Cycle - // (CBC6) Trip Latch -#define EPWM_TZCBCCLR_DCAEVT2 0x40 // Clear Flag forDCAEVT2 selected - // for CBC -#define EPWM_TZCBCCLR_DCBEVT2 0x80 // Clear Flag for DCBEVT2 selected - // for CBC - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZOSTCLR register -// -//***************************************************************************** -#define EPWM_TZOSTCLR_OST1 0x1 // Clear Flag for Oneshot (OST1) - // Trip Latch -#define EPWM_TZOSTCLR_OST2 0x2 // Clear Flag for Oneshot (OST2) - // Trip Latch -#define EPWM_TZOSTCLR_OST3 0x4 // Clear Flag for Oneshot (OST3) - // Trip Latch -#define EPWM_TZOSTCLR_OST4 0x8 // Clear Flag for Oneshot (OST4) - // Trip Latch -#define EPWM_TZOSTCLR_OST5 0x10 // Clear Flag for Oneshot (OST5) - // Trip Latch -#define EPWM_TZOSTCLR_OST6 0x20 // Clear Flag for Oneshot (OST6) - // Trip Latch -#define EPWM_TZOSTCLR_DCAEVT2 0x40 // Clear Flag for DCAEVT1 selected - // for OST -#define EPWM_TZOSTCLR_DCBEVT2 0x80 // Clear Flag for DCBEVT1 selected - // for OST - -//***************************************************************************** -// -// The following are defines for the bit fields in the TZFRC register -// -//***************************************************************************** -#define EPWM_TZFRC_CBC 0x2 // Force Trip Zones Cycle By Cycle - // Event -#define EPWM_TZFRC_OST 0x4 // Force Trip Zones One Shot Event -#define EPWM_TZFRC_DCAEVT1 0x8 // Force Digital Compare A Event 1 -#define EPWM_TZFRC_DCAEVT2 0x10 // Force Digital Compare A Event 2 -#define EPWM_TZFRC_DCBEVT1 0x20 // Force Digital Compare B Event 1 -#define EPWM_TZFRC_DCBEVT2 0x40 // Force Digital Compare B Event 2 - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETSEL register -// -//***************************************************************************** -#define EPWM_ETSEL_INTSEL_S 0 -#define EPWM_ETSEL_INTSEL_M 0x7 // EPWMxINTn Select -#define EPWM_ETSEL_INTEN 0x8 // EPWMxINTn Enable -#define EPWM_ETSEL_SOCASELCMP 0x10 // EPWMxSOCA Compare Select -#define EPWM_ETSEL_SOCBSELCMP 0x20 // EPWMxSOCB Compare Select -#define EPWM_ETSEL_INTSELCMP 0x40 // EPWMxINT Compare Select -#define EPWM_ETSEL_SOCASEL_S 8 -#define EPWM_ETSEL_SOCASEL_M 0x700 // Start of Conversion A Select -#define EPWM_ETSEL_SOCAEN 0x800 // Start of Conversion A Enable -#define EPWM_ETSEL_SOCBSEL_S 12 -#define EPWM_ETSEL_SOCBSEL_M 0x7000 // Start of Conversion B Select -#define EPWM_ETSEL_SOCBEN 0x8000 // Start of Conversion B Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETPS register -// -//***************************************************************************** -#define EPWM_ETPS_INTPRD_S 0 -#define EPWM_ETPS_INTPRD_M 0x3 // EPWMxINTn Period Select -#define EPWM_ETPS_INTCNT_S 2 -#define EPWM_ETPS_INTCNT_M 0xC // EPWMxINTn Counter Register -#define EPWM_ETPS_INTPSSEL 0x10 // EPWMxINTn Pre-Scale Selection - // Bits -#define EPWM_ETPS_SOCPSSEL 0x20 // EPWMxSOC A/B Pre-Scale - // Selection Bits -#define EPWM_ETPS_SOCAPRD_S 8 -#define EPWM_ETPS_SOCAPRD_M 0x300 // EPWMxSOCA Period Select -#define EPWM_ETPS_SOCACNT_S 10 -#define EPWM_ETPS_SOCACNT_M 0xC00 // EPWMxSOCA Counter Register -#define EPWM_ETPS_SOCBPRD_S 12 -#define EPWM_ETPS_SOCBPRD_M 0x3000 // EPWMxSOCB Period Select -#define EPWM_ETPS_SOCBCNT_S 14 -#define EPWM_ETPS_SOCBCNT_M 0xC000 // EPWMxSOCB Counter - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETFLG register -// -//***************************************************************************** -#define EPWM_ETFLG_INT 0x1 // EPWMxINTn Flag -#define EPWM_ETFLG_SOCA 0x4 // EPWMxSOCA Flag -#define EPWM_ETFLG_SOCB 0x8 // EPWMxSOCB Flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETCLR register -// -//***************************************************************************** -#define EPWM_ETCLR_INT 0x1 // EPWMxINTn Clear -#define EPWM_ETCLR_SOCA 0x4 // EPWMxSOCA Clear -#define EPWM_ETCLR_SOCB 0x8 // EPWMxSOCB Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETFRC register -// -//***************************************************************************** -#define EPWM_ETFRC_INT 0x1 // EPWMxINTn Force -#define EPWM_ETFRC_SOCA 0x4 // EPWMxSOCA Force -#define EPWM_ETFRC_SOCB 0x8 // EPWMxSOCB Force - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETINTPS register -// -//***************************************************************************** -#define EPWM_ETINTPS_INTPRD2_S 0 -#define EPWM_ETINTPS_INTPRD2_M 0xF // EPWMxINTn Period Select -#define EPWM_ETINTPS_INTCNT2_S 4 -#define EPWM_ETINTPS_INTCNT2_M 0xF0 // EPWMxINTn Counter Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETSOCPS register -// -//***************************************************************************** -#define EPWM_ETSOCPS_SOCAPRD2_S 0 -#define EPWM_ETSOCPS_SOCAPRD2_M 0xF // EPWMxSOCA Period Select -#define EPWM_ETSOCPS_SOCACNT2_S 4 -#define EPWM_ETSOCPS_SOCACNT2_M 0xF0 // EPWMxSOCA Counter Register -#define EPWM_ETSOCPS_SOCBPRD2_S 8 -#define EPWM_ETSOCPS_SOCBPRD2_M 0xF00 // EPWMxSOCB Period Select -#define EPWM_ETSOCPS_SOCBCNT2_S 12 -#define EPWM_ETSOCPS_SOCBCNT2_M 0xF000 // EPWMxSOCB Counter Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETCNTINITCTL register -// -//***************************************************************************** -#define EPWM_ETCNTINITCTL_INTINITFRC 0x400 // EPWMxINT Counter Initialization - // Force -#define EPWM_ETCNTINITCTL_SOCAINITFRC 0x800 // EPWMxSOCA Counter - // Initialization Force -#define EPWM_ETCNTINITCTL_SOCBINITFRC 0x1000 // EPWMxSOCB Counter - // Initialization Force -#define EPWM_ETCNTINITCTL_INTINITEN 0x2000 // EPWMxINT Counter Initialization - // Enable -#define EPWM_ETCNTINITCTL_SOCAINITEN 0x4000 // EPWMxSOCA Counter - // Initialization Enable -#define EPWM_ETCNTINITCTL_SOCBINITEN 0x8000 // EPWMxSOCB Counter - // Initialization Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the ETCNTINIT register -// -//***************************************************************************** -#define EPWM_ETCNTINIT_INTINIT_S 0 -#define EPWM_ETCNTINIT_INTINIT_M 0xF // EPWMxINT Counter Initialization - // Bits -#define EPWM_ETCNTINIT_SOCAINIT_S 4 -#define EPWM_ETCNTINIT_SOCAINIT_M 0xF0 // EPWMxSOCA Counter - // Initialization Bits -#define EPWM_ETCNTINIT_SOCBINIT_S 8 -#define EPWM_ETCNTINIT_SOCBINIT_M 0xF00 // EPWMxSOCB Counter - // Initialization Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCTRIPSEL register -// -//***************************************************************************** -#define EPWM_DCTRIPSEL_DCAHCOMPSEL_S 0 -#define EPWM_DCTRIPSEL_DCAHCOMPSEL_M 0xF // Digital Compare A High COMP - // Input Select -#define EPWM_DCTRIPSEL_DCALCOMPSEL_S 4 -#define EPWM_DCTRIPSEL_DCALCOMPSEL_M 0xF0 // Digital Compare A Low COMP - // Input Select -#define EPWM_DCTRIPSEL_DCBHCOMPSEL_S 8 -#define EPWM_DCTRIPSEL_DCBHCOMPSEL_M 0xF00 // Digital Compare B High COMP - // Input Select -#define EPWM_DCTRIPSEL_DCBLCOMPSEL_S 12 -#define EPWM_DCTRIPSEL_DCBLCOMPSEL_M 0xF000 // Digital Compare B Low COMP - // Input Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCACTL register -// -//***************************************************************************** -#define EPWM_DCACTL_EVT1SRCSEL 0x1 // DCAEVT1 Source Signal -#define EPWM_DCACTL_EVT1FRCSYNCSEL 0x2 // DCAEVT1 Force Sync Signal -#define EPWM_DCACTL_EVT1SOCE 0x4 // DCAEVT1 SOC Enable -#define EPWM_DCACTL_EVT1SYNCE 0x8 // DCAEVT1 SYNC Enable -#define EPWM_DCACTL_EVT2SRCSEL 0x100 // DCAEVT2 Source Signal -#define EPWM_DCACTL_EVT2FRCSYNCSEL 0x200 // DCAEVT2 Force Sync Signal - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCBCTL register -// -//***************************************************************************** -#define EPWM_DCBCTL_EVT1SRCSEL 0x1 // DCBEVT1 Source Signal -#define EPWM_DCBCTL_EVT1FRCSYNCSEL 0x2 // DCBEVT1 Force Sync Signal -#define EPWM_DCBCTL_EVT1SOCE 0x4 // DCBEVT1 SOC Enable -#define EPWM_DCBCTL_EVT1SYNCE 0x8 // DCBEVT1 SYNC Enable -#define EPWM_DCBCTL_EVT2SRCSEL 0x100 // DCBEVT2 Source Signal -#define EPWM_DCBCTL_EVT2FRCSYNCSEL 0x200 // DCBEVT2 Force Sync Signal - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCFCTL register -// -//***************************************************************************** -#define EPWM_DCFCTL_SRCSEL_S 0 -#define EPWM_DCFCTL_SRCSEL_M 0x3 // Filter Block Signal Source - // Select -#define EPWM_DCFCTL_BLANKE 0x4 // Blanking Enable/Disable -#define EPWM_DCFCTL_BLANKINV 0x8 // Blanking Window Inversion -#define EPWM_DCFCTL_PULSESEL_S 4 -#define EPWM_DCFCTL_PULSESEL_M 0x30 // Pulse Select for Blanking & - // Capture Alignment - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCCAPCTL register -// -//***************************************************************************** -#define EPWM_DCCAPCTL_CAPE 0x1 // Counter Capture Enable -#define EPWM_DCCAPCTL_SHDWMODE 0x2 // Counter Capture Mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCFOFFSET register -// -//***************************************************************************** -#define EPWM_DCFOFFSET_DCFOFFSET_S 0 -#define EPWM_DCFOFFSET_DCFOFFSET_M 0xFFFF // Blanking Offset - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCFOFFSETCNT register -// -//***************************************************************************** -#define EPWM_DCFOFFSETCNT_DCFOFFSETCNT_S 0 -#define EPWM_DCFOFFSETCNT_DCFOFFSETCNT_M 0xFFFF // Blanking Offset Counter - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCFWINDOW register -// -//***************************************************************************** -#define EPWM_DCFWINDOW_DCFWINDOW_S 0 -#define EPWM_DCFWINDOW_DCFWINDOW_M 0xFFFF // Digital Compare Filter Window - // Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCFWINDOWCNT register -// -//***************************************************************************** -#define EPWM_DCFWINDOWCNT_DCFWINDOWCNT_S 0 -#define EPWM_DCFWINDOWCNT_DCFWINDOWCNT_M 0xFFFF // Digital Compare Filter Window - // Counter Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCCAP register -// -//***************************************************************************** -#define EPWM_DCCAP_DCCAP_S 0 -#define EPWM_DCCAP_DCCAP_M 0xFFFF // Time Base Counter Capture - // Register - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCAHTRIPSEL register -// -//***************************************************************************** -#define EPWM_DCAHTRIPSEL_TRIPINPUT1 0x1 // Trip Input 1 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT2 0x2 // Trip Input 2 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT3 0x4 // Trip Input 3 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT4 0x8 // Trip Input 4 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT5 0x10 // Trip Input 5 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT6 0x20 // Trip Input 6 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT7 0x40 // Trip Input 7 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT8 0x80 // Trip Input 8 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT9 0x100 // Trip Input 9 Select to DCAH Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT10 0x200 // Trip Input 10 Select to DCAH - // Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT11 0x400 // Trip Input 11 Select to DCAH - // Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT12 0x800 // Trip Input 12 Select to DCAH - // Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT13 0x1000 // Trip Input 13 Select to DCAH - // Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT14 0x2000 // Trip Input 14 Select to DCAH - // Mux -#define EPWM_DCAHTRIPSEL_TRIPINPUT15 0x4000 // Trip Input 15 Select to DCAH - // Mux - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCALTRIPSEL register -// -//***************************************************************************** -#define EPWM_DCALTRIPSEL_TRIPINPUT1 0x1 // Trip Input 1 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT2 0x2 // Trip Input 2 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT3 0x4 // Trip Input 3 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT4 0x8 // Trip Input 4 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT5 0x10 // Trip Input 5 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT6 0x20 // Trip Input 6 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT7 0x40 // Trip Input 7 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT8 0x80 // Trip Input 8 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT9 0x100 // Trip Input 9 Select to DCAL Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT10 0x200 // Trip Input 10 Select to DCAL - // Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT11 0x400 // Trip Input 11 Select to DCAL - // Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT12 0x800 // Trip Input 12 Select to DCAL - // Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT13 0x1000 // Trip Input 13 Select to DCAL - // Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT14 0x2000 // Trip Input 14 Select to DCAL - // Mux -#define EPWM_DCALTRIPSEL_TRIPINPUT15 0x4000 // Trip Input 15 Select to DCAL - // Mux - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCBHTRIPSEL register -// -//***************************************************************************** -#define EPWM_DCBHTRIPSEL_TRIPINPUT1 0x1 // Trip Input 1 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT2 0x2 // Trip Input 2 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT3 0x4 // Trip Input 3 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT4 0x8 // Trip Input 4 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT5 0x10 // Trip Input 5 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT6 0x20 // Trip Input 6 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT7 0x40 // Trip Input 7 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT8 0x80 // Trip Input 8 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT9 0x100 // Trip Input 9 Select to DCBH Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT10 0x200 // Trip Input 10 Select to DCBH - // Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT11 0x400 // Trip Input 11 Select to DCBH - // Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT12 0x800 // Trip Input 12 Select to DCBH - // Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT13 0x1000 // Trip Input 13 Select to DCBH - // Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT14 0x2000 // Trip Input 14 Select to DCBH - // Mux -#define EPWM_DCBHTRIPSEL_TRIPINPUT15 0x4000 // Trip Input 15 Select to DCBH - // Mux - -//***************************************************************************** -// -// The following are defines for the bit fields in the DCBLTRIPSEL register -// -//***************************************************************************** -#define EPWM_DCBLTRIPSEL_TRIPINPUT1 0x1 // Trip Input 1 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT2 0x2 // Trip Input 2 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT3 0x4 // Trip Input 3 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT4 0x8 // Trip Input 4 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT5 0x10 // Trip Input 5 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT6 0x20 // Trip Input 6 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT7 0x40 // Trip Input 7 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT8 0x80 // Trip Input 8 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT9 0x100 // Trip Input 9 Select to DCBL Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT10 0x200 // Trip Input 10 Select to DCBL - // Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT11 0x400 // Trip Input 11 Select to DCBL - // Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT12 0x800 // Trip Input 12 Select to DCBL - // Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT13 0x1000 // Trip Input 13 Select to DCBL - // Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT14 0x2000 // Trip Input 14 Select to DCBL - // Mux -#define EPWM_DCBLTRIPSEL_TRIPINPUT15 0x4000 // Trip Input 15 Select to DCBL - // Mux -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_eqep.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_eqep.h deleted file mode 100644 index 6d5f37b5eb..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_eqep.h +++ /dev/null @@ -1,391 +0,0 @@ -//########################################################################### -// -// FILE: hw_eqep.h -// -// TITLE: Definitions for the C28x EQEP registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_EQEP_H__ -#define __HW_EQEP_H__ - -//***************************************************************************** -// -// The following are defines for the EQEP register offsets -// -//***************************************************************************** -#define EQEP_O_QPOSCNT 0x0 // Position Counter -#define EQEP_O_QPOSINIT 0x2 // Position Counter Init -#define EQEP_O_QPOSMAX 0x4 // Maximum Position Count -#define EQEP_O_QPOSCMP 0x6 // Position Compare -#define EQEP_O_QPOSILAT 0x8 // Index Position Latch -#define EQEP_O_QPOSSLAT 0xA // Strobe Position Latch -#define EQEP_O_QPOSLAT 0xC // Position Latch -#define EQEP_O_QUTMR 0xE // QEP Unit Timer -#define EQEP_O_QUPRD 0x10 // QEP Unit Period -#define EQEP_O_QWDTMR 0x12 // QEP Watchdog Timer -#define EQEP_O_QWDPRD 0x13 // QEP Watchdog Period -#define EQEP_O_QDECCTL 0x14 // Quadrature Decoder Control -#define EQEP_O_QEPCTL 0x15 // QEP Control -#define EQEP_O_QCAPCTL 0x16 // Qaudrature Capture Control -#define EQEP_O_QPOSCTL 0x17 // Position Compare Control -#define EQEP_O_QEINT 0x18 // QEP Interrupt Control -#define EQEP_O_QFLG 0x19 // QEP Interrupt Flag -#define EQEP_O_QCLR 0x1A // QEP Interrupt Clear -#define EQEP_O_QFRC 0x1B // QEP Interrupt Force -#define EQEP_O_QEPSTS 0x1C // QEP Status -#define EQEP_O_QCTMR 0x1D // QEP Capture Timer -#define EQEP_O_QCPRD 0x1E // QEP Capture Period -#define EQEP_O_QCTMRLAT 0x1F // QEP Capture Latch -#define EQEP_O_QCPRDLAT 0x20 // QEP Capture Period Latch - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSCNT register -// -//***************************************************************************** -#define EQEP_QPOSCNT_QPOSCNT_S 0 -#define EQEP_QPOSCNT_QPOSCNT_M 0xFFFFFFFF // Position Counter - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSINIT register -// -//***************************************************************************** -#define EQEP_QPOSINIT_QPOSINIT_S 0 -#define EQEP_QPOSINIT_QPOSINIT_M 0xFFFFFFFF // Position Counter Init - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSMAX register -// -//***************************************************************************** -#define EQEP_QPOSMAX_QPOSMAX_S 0 -#define EQEP_QPOSMAX_QPOSMAX_M 0xFFFFFFFF // Maximum Position Count - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSCMP register -// -//***************************************************************************** -#define EQEP_QPOSCMP_QPOSCMP_S 0 -#define EQEP_QPOSCMP_QPOSCMP_M 0xFFFFFFFF // Position Compare - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSILAT register -// -//***************************************************************************** -#define EQEP_QPOSILAT_QPOSILAT_S 0 -#define EQEP_QPOSILAT_QPOSILAT_M 0xFFFFFFFF // Index Position Latch - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSSLAT register -// -//***************************************************************************** -#define EQEP_QPOSSLAT_QPOSSLAT_S 0 -#define EQEP_QPOSSLAT_QPOSSLAT_M 0xFFFFFFFF // Strobe Position Latch - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSLAT register -// -//***************************************************************************** -#define EQEP_QPOSLAT_QPOSLAT_S 0 -#define EQEP_QPOSLAT_QPOSLAT_M 0xFFFFFFFF // Position Latch - -//***************************************************************************** -// -// The following are defines for the bit fields in the QUTMR register -// -//***************************************************************************** -#define EQEP_QUTMR_QUTMR_S 0 -#define EQEP_QUTMR_QUTMR_M 0xFFFFFFFF // QEP Unit Timer - -//***************************************************************************** -// -// The following are defines for the bit fields in the QUPRD register -// -//***************************************************************************** -#define EQEP_QUPRD_QUPRD_S 0 -#define EQEP_QUPRD_QUPRD_M 0xFFFFFFFF // QEP Unit Period - -//***************************************************************************** -// -// The following are defines for the bit fields in the QWDTMR register -// -//***************************************************************************** -#define EQEP_QWDTMR_QWDTMR_S 0 -#define EQEP_QWDTMR_QWDTMR_M 0xFFFF // QEP Watchdog Timer - -//***************************************************************************** -// -// The following are defines for the bit fields in the QWDPRD register -// -//***************************************************************************** -#define EQEP_QWDPRD_QWDPRD_S 0 -#define EQEP_QWDPRD_QWDPRD_M 0xFFFF // QEP Watchdog Period - -//***************************************************************************** -// -// The following are defines for the bit fields in the QDECCTL register -// -//***************************************************************************** -#define EQEP_QDECCTL_QSP 0x20 // QEPS input polarity -#define EQEP_QDECCTL_QIP 0x40 // QEPI input polarity -#define EQEP_QDECCTL_QBP 0x80 // QEPB input polarity -#define EQEP_QDECCTL_QAP 0x100 // QEPA input polarity -#define EQEP_QDECCTL_IGATE 0x200 // Index pulse gating option -#define EQEP_QDECCTL_SWAP 0x400 // CLK/DIR Signal Source for - // Position Counter -#define EQEP_QDECCTL_XCR 0x800 // External Clock Rate -#define EQEP_QDECCTL_SPSEL 0x1000 // Sync output pin selection -#define EQEP_QDECCTL_SOEN 0x2000 // Sync output-enable -#define EQEP_QDECCTL_QSRC_S 14 -#define EQEP_QDECCTL_QSRC_M 0xC000 // Position-counter source - // selection - -//***************************************************************************** -// -// The following are defines for the bit fields in the QEPCTL register -// -//***************************************************************************** -#define EQEP_QEPCTL_WDE 0x1 // QEP watchdog enable -#define EQEP_QEPCTL_UTE 0x2 // QEP unit timer enable -#define EQEP_QEPCTL_QCLM 0x4 // QEP capture latch mode -#define EQEP_QEPCTL_QPEN 0x8 // Quadrature postotion counter - // enable -#define EQEP_QEPCTL_IEL_S 4 -#define EQEP_QEPCTL_IEL_M 0x30 // Index event latch -#define EQEP_QEPCTL_SEL 0x40 // Strobe event latch -#define EQEP_QEPCTL_SWI 0x80 // Software init position counter -#define EQEP_QEPCTL_IEI_S 8 -#define EQEP_QEPCTL_IEI_M 0x300 // Index event init of position - // count -#define EQEP_QEPCTL_SEI_S 10 -#define EQEP_QEPCTL_SEI_M 0xC00 // Strobe event init -#define EQEP_QEPCTL_PCRM_S 12 -#define EQEP_QEPCTL_PCRM_M 0x3000 // Postion counter reset -#define EQEP_QEPCTL_FREE_SOFT_S 14 -#define EQEP_QEPCTL_FREE_SOFT_M 0xC000 // Emulation mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the QCAPCTL register -// -//***************************************************************************** -#define EQEP_QCAPCTL_UPPS_S 0 -#define EQEP_QCAPCTL_UPPS_M 0xF // Unit position event prescaler -#define EQEP_QCAPCTL_CCPS_S 4 -#define EQEP_QCAPCTL_CCPS_M 0x70 // eQEP capture timer clock - // prescaler -#define EQEP_QCAPCTL_CEN 0x8000 // Enable eQEP capture - -//***************************************************************************** -// -// The following are defines for the bit fields in the QPOSCTL register -// -//***************************************************************************** -#define EQEP_QPOSCTL_PCSPW_S 0 -#define EQEP_QPOSCTL_PCSPW_M 0xFFF // Position compare sync pulse - // width -#define EQEP_QPOSCTL_PCE 0x1000 // Position compare enable/disable -#define EQEP_QPOSCTL_PCPOL 0x2000 // Polarity of sync output -#define EQEP_QPOSCTL_PCLOAD 0x4000 // Position compare of shadow load -#define EQEP_QPOSCTL_PCSHDW 0x8000 // Position compare of shadow - // enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the QEINT register -// -//***************************************************************************** -#define EQEP_QEINT_PCE 0x2 // Position counter error - // interrupt enable -#define EQEP_QEINT_QPE 0x4 // Quadrature phase error - // interrupt enable -#define EQEP_QEINT_QDC 0x8 // Quadrature direction change - // interrupt enable -#define EQEP_QEINT_WTO 0x10 // Watchdog time out interrupt - // enable -#define EQEP_QEINT_PCU 0x20 // Position counter underflow - // interrupt enable -#define EQEP_QEINT_PCO 0x40 // Position counter overflow - // interrupt enable -#define EQEP_QEINT_PCR 0x80 // Position-compare ready - // interrupt enable -#define EQEP_QEINT_PCM 0x100 // Position-compare match - // interrupt enable -#define EQEP_QEINT_SEL 0x200 // Strobe event latch interrupt - // enable -#define EQEP_QEINT_IEL 0x400 // Index event latch interrupt - // enable -#define EQEP_QEINT_UTO 0x800 // Unit time out interrupt enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the QFLG register -// -//***************************************************************************** -#define EQEP_QFLG_INT 0x1 // Global interrupt status flag -#define EQEP_QFLG_PCE 0x2 // Position counter error - // interrupt flag -#define EQEP_QFLG_PHE 0x4 // Quadrature phase error - // interrupt flag -#define EQEP_QFLG_QDC 0x8 // Quadrature direction change - // interrupt flag -#define EQEP_QFLG_WTO 0x10 // Watchdog timeout interrupt flag -#define EQEP_QFLG_PCU 0x20 // Position counter underflow - // interrupt flag -#define EQEP_QFLG_PCO 0x40 // Position counter overflow - // interrupt flag -#define EQEP_QFLG_PCR 0x80 // Position-compare ready - // interrupt flag -#define EQEP_QFLG_PCM 0x100 // eQEP compare match event - // interrupt flag -#define EQEP_QFLG_SEL 0x200 // Strobe event latch interrupt - // flag -#define EQEP_QFLG_IEL 0x400 // Index event latch interrupt - // flag -#define EQEP_QFLG_UTO 0x800 // Unit time out interrupt flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the QCLR register -// -//***************************************************************************** -#define EQEP_QCLR_INT 0x1 // Global interrupt clear flag -#define EQEP_QCLR_PCE 0x2 // Clear position counter error - // interrupt flag -#define EQEP_QCLR_PHE 0x4 // Clear quadrature phase error - // interrupt flag -#define EQEP_QCLR_QDC 0x8 // Clear quadrature direction - // change interrupt flag -#define EQEP_QCLR_WTO 0x10 // Clear watchdog timeout - // interrupt flag -#define EQEP_QCLR_PCU 0x20 // Clear position counter - // underflow interrupt flag -#define EQEP_QCLR_PCO 0x40 // Clear position counter overflow - // interrupt flag -#define EQEP_QCLR_PCR 0x80 // Clear position-compare ready - // interrupt flag -#define EQEP_QCLR_PCM 0x100 // Clear eQEP compare match event - // interrupt flag -#define EQEP_QCLR_SEL 0x200 // Clear strobe event latch - // interrupt flag -#define EQEP_QCLR_IEL 0x400 // Clear index event latch - // interrupt flag -#define EQEP_QCLR_UTO 0x800 // Clear unit time out interrupt - // flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the QFRC register -// -//***************************************************************************** -#define EQEP_QFRC_PCE 0x2 // Force position counter error - // interrupt -#define EQEP_QFRC_PHE 0x4 // Force quadrature phase error - // interrupt -#define EQEP_QFRC_QDC 0x8 // Force quadrature direction - // change interrupt -#define EQEP_QFRC_WTO 0x10 // Force watchdog time out - // interrupt -#define EQEP_QFRC_PCU 0x20 // Force position counter - // underflow interrupt -#define EQEP_QFRC_PCO 0x40 // Force position counter overflow - // interrupt -#define EQEP_QFRC_PCR 0x80 // Force position-compare ready - // interrupt -#define EQEP_QFRC_PCM 0x100 // Force position-compare match - // interrupt -#define EQEP_QFRC_SEL 0x200 // Force strobe event latch - // interrupt -#define EQEP_QFRC_IEL 0x400 // Force index event latch - // interrupt -#define EQEP_QFRC_UTO 0x800 // Force unit time out interrupt - -//***************************************************************************** -// -// The following are defines for the bit fields in the QEPSTS register -// -//***************************************************************************** -#define EQEP_QEPSTS_PCEF 0x1 // Position counter error flag. -#define EQEP_QEPSTS_FIMF 0x2 // First index marker flag -#define EQEP_QEPSTS_CDEF 0x4 // Capture direction error flag -#define EQEP_QEPSTS_COEF 0x8 // Capture overflow error flag -#define EQEP_QEPSTS_QDLF 0x10 // eQEP direction latch flag -#define EQEP_QEPSTS_QDF 0x20 // Quadrature direction flag -#define EQEP_QEPSTS_FIDF 0x40 // The first index marker -#define EQEP_QEPSTS_UPEVNT 0x80 // Unit position event flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the QCTMR register -// -//***************************************************************************** -#define EQEP_QCTMR_QCTMR_S 0 -#define EQEP_QCTMR_QCTMR_M 0xFFFF // This register provides time - // base for edge capture unit. - -//***************************************************************************** -// -// The following are defines for the bit fields in the QCPRD register -// -//***************************************************************************** -#define EQEP_QCPRD_QCPRD_S 0 -#define EQEP_QCPRD_QCPRD_M 0xFFFF // Period count value between - // eQEP position events - -//***************************************************************************** -// -// The following are defines for the bit fields in the QCTMRLAT register -// -//***************************************************************************** -#define EQEP_QCTMRLAT_QCTMRLAT_S 0 -#define EQEP_QCTMRLAT_QCTMRLAT_M 0xFFFF // The eQEP capture timer latch - // value - -//***************************************************************************** -// -// The following are defines for the bit fields in the QCPRDLAT register -// -//***************************************************************************** -#define EQEP_QCPRDLAT_QCPRDLAT_S 0 -#define EQEP_QCPRDLAT_QCPRDLAT_M 0xFFFF // eQEP capture period latch value -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_gpio.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_gpio.h deleted file mode 100644 index 63c4f62a1e..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_gpio.h +++ /dev/null @@ -1,5662 +0,0 @@ -//########################################################################### -// -// FILE: hw_gpio.h -// -// TITLE: Definitions for the C28x GPIO registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_GPIO_H__ -#define __HW_GPIO_H__ - -//***************************************************************************** -// -// The following are defines for the GPIO register offsets -// -//***************************************************************************** -#define GPIO_O_GPACTRL 0x0 // GPIO A Qualification Sampling - // Period Control (GPIO0 to 31) -#define GPIO_O_GPAQSEL1 0x2 // GPIO A Qualifier Select 1 - // Register (GPIO0 to 15) -#define GPIO_O_GPAQSEL2 0x4 // GPIO A Qualifier Select 2 - // Register (GPIO16 to 31) -#define GPIO_O_GPAMUX1 0x6 // GPIO A Mux 1 Register (GPIO0 to - // 15) -#define GPIO_O_GPAMUX2 0x8 // GPIO A Mux 2 Register (GPIO16 - // to 31) -#define GPIO_O_GPADIR 0xA // GPIO A Direction Register - // (GPIO0 to 31) -#define GPIO_O_GPAPUD 0xC // GPIO A Pull Up Disable Register - // (GPIO0 to 31) -#define GPIO_O_GPAINV 0x10 // GPIO A Input Polarity Invert - // Registers (GPIO0 to 31) -#define GPIO_O_GPAODR 0x12 // GPIO A Open Drain Output - // Register (GPIO0 to GPIO31) -#define GPIO_O_GPAGMUX1 0x20 // GPIO A Peripheral Group Mux - // (GPIO0 to 15) -#define GPIO_O_GPAGMUX2 0x22 // GPIO A Peripheral Group Mux - // (GPIO16 to 31) -#define GPIO_O_GPACSEL1 0x28 // GPIO A Core Select Register - // (GPIO0 to 7) -#define GPIO_O_GPACSEL2 0x2A // GPIO A Core Select Register - // (GPIO8 to 15) -#define GPIO_O_GPACSEL3 0x2C // GPIO A Core Select Register - // (GPIO16 to 23) -#define GPIO_O_GPACSEL4 0x2E // GPIO A Core Select Register - // (GPIO24 to 31) -#define GPIO_O_GPALOCK 0x3C // GPIO A Lock Configuration - // Register (GPIO0 to 31) -#define GPIO_O_GPACR 0x3E // GPIO A Lock Commit Register - // (GPIO0 to 31) -#define GPIO_O_GPBCTRL 0x40 // GPIO B Qualification Sampling - // Period Control (GPIO32 to 63) -#define GPIO_O_GPBQSEL1 0x42 // GPIO B Qualifier Select 1 - // Register (GPIO32 to 47) -#define GPIO_O_GPBQSEL2 0x44 // GPIO B Qualifier Select 2 - // Register (GPIO48 to 63) -#define GPIO_O_GPBMUX1 0x46 // GPIO B Mux 1 Register (GPIO32 - // to 47) -#define GPIO_O_GPBMUX2 0x48 // GPIO B Mux 2 Register (GPIO48 - // to 63) -#define GPIO_O_GPBDIR 0x4A // GPIO B Direction Register - // (GPIO32 to 63) -#define GPIO_O_GPBPUD 0x4C // GPIO B Pull Up Disable Register - // (GPIO32 to 63) -#define GPIO_O_GPBINV 0x50 // GPIO B Input Polarity Invert - // Registers (GPIO32 to 63) -#define GPIO_O_GPBODR 0x52 // GPIO B Open Drain Output - // Register (GPIO32 to GPIO63) -#define GPIO_O_GPBAMSEL 0x54 // GPIO B Analog Mode Select - // register (GPIO32 to GPIO63) -#define GPIO_O_GPBGMUX1 0x60 // GPIO B Peripheral Group Mux - // (GPIO32 to 47) -#define GPIO_O_GPBGMUX2 0x62 // GPIO B Peripheral Group Mux - // (GPIO48 to 63) -#define GPIO_O_GPBCSEL1 0x68 // GPIO B Core Select Register - // (GPIO32 to 39) -#define GPIO_O_GPBCSEL2 0x6A // GPIO B Core Select Register - // (GPIO40 to 47) -#define GPIO_O_GPBCSEL3 0x6C // GPIO B Core Select Register - // (GPIO48 to 55) -#define GPIO_O_GPBCSEL4 0x6E // GPIO B Core Select Register - // (GPIO56 to 63) -#define GPIO_O_GPBLOCK 0x7C // GPIO B Lock Configuration - // Register (GPIO32 to 63) -#define GPIO_O_GPBCR 0x7E // GPIO B Lock Commit Register - // (GPIO32 to 63) -#define GPIO_O_GPCCTRL 0x80 // GPIO C Qualification Sampling - // Period Control (GPIO64 to 95) -#define GPIO_O_GPCQSEL1 0x82 // GPIO C Qualifier Select 1 - // Register (GPIO64 to 79) -#define GPIO_O_GPCQSEL2 0x84 // GPIO C Qualifier Select 2 - // Register (GPIO80 to 95) -#define GPIO_O_GPCMUX1 0x86 // GPIO C Mux 1 Register (GPIO64 - // to 79) -#define GPIO_O_GPCMUX2 0x88 // GPIO C Mux 2 Register (GPIO80 - // to 95) -#define GPIO_O_GPCDIR 0x8A // GPIO C Direction Register - // (GPIO64 to 95) -#define GPIO_O_GPCPUD 0x8C // GPIO C Pull Up Disable Register - // (GPIO64 to 95) -#define GPIO_O_GPCINV 0x90 // GPIO C Input Polarity Invert - // Registers (GPIO64 to 95) -#define GPIO_O_GPCODR 0x92 // GPIO C Open Drain Output - // Register (GPIO64 to GPIO95) -#define GPIO_O_GPCGMUX1 0xA0 // GPIO C Peripheral Group Mux - // (GPIO64 to 79) -#define GPIO_O_GPCGMUX2 0xA2 // GPIO C Peripheral Group Mux - // (GPIO80 to 95) -#define GPIO_O_GPCCSEL1 0xA8 // GPIO C Core Select Register - // (GPIO64 to 71) -#define GPIO_O_GPCCSEL2 0xAA // GPIO C Core Select Register - // (GPIO72 to 79) -#define GPIO_O_GPCCSEL3 0xAC // GPIO C Core Select Register - // (GPIO80 to 87) -#define GPIO_O_GPCCSEL4 0xAE // GPIO C Core Select Register - // (GPIO88 to 95) -#define GPIO_O_GPCLOCK 0xBC // GPIO C Lock Configuration - // Register (GPIO64 to 95) -#define GPIO_O_GPCCR 0xBE // GPIO C Lock Commit Register - // (GPIO64 to 95) -#define GPIO_O_GPDCTRL 0xC0 // GPIO D Qualification Sampling - // Period Control (GPIO96 to 127) -#define GPIO_O_GPDQSEL1 0xC2 // GPIO D Qualifier Select 1 - // Register (GPIO96 to 111) -#define GPIO_O_GPDQSEL2 0xC4 // GPIO D Qualifier Select 2 - // Register (GPIO112 to 127) -#define GPIO_O_GPDMUX1 0xC6 // GPIO D Mux 1 Register (GPIO96 - // to 111) -#define GPIO_O_GPDMUX2 0xC8 // GPIO D Mux 2 Register (GPIO112 - // to 127) -#define GPIO_O_GPDDIR 0xCA // GPIO D Direction Register - // (GPIO96 to 127) -#define GPIO_O_GPDPUD 0xCC // GPIO D Pull Up Disable Register - // (GPIO96 to 127) -#define GPIO_O_GPDINV 0xD0 // GPIO D Input Polarity Invert - // Registers (GPIO96 to 127) -#define GPIO_O_GPDODR 0xD2 // GPIO D Open Drain Output - // Register (GPIO96 to GPIO127) -#define GPIO_O_GPDGMUX1 0xE0 // GPIO D Peripheral Group Mux - // (GPIO96 to 111) -#define GPIO_O_GPDGMUX2 0xE2 // GPIO D Peripheral Group Mux - // (GPIO112 to 127) -#define GPIO_O_GPDCSEL1 0xE8 // GPIO D Core Select Register - // (GPIO96 to 103) -#define GPIO_O_GPDCSEL2 0xEA // GPIO D Core Select Register - // (GPIO104 to 111) -#define GPIO_O_GPDCSEL3 0xEC // GPIO D Core Select Register - // (GPIO112 to 119) -#define GPIO_O_GPDCSEL4 0xEE // GPIO D Core Select Register - // (GPIO120 to 127) -#define GPIO_O_GPDLOCK 0xFC // GPIO D Lock Configuration - // Register (GPIO96 to 127) -#define GPIO_O_GPDCR 0xFE // GPIO D Lock Commit Register - // (GPIO96 to 127) -#define GPIO_O_GPECTRL 0x100 // GPIO E Qualification Sampling - // Period Control (GPIO128 to - // 159) -#define GPIO_O_GPEQSEL1 0x102 // GPIO E Qualifier Select 1 - // Register (GPIO128 to 143) -#define GPIO_O_GPEQSEL2 0x104 // GPIO E Qualifier Select 2 - // Register (GPIO144 to 159) -#define GPIO_O_GPEMUX1 0x106 // GPIO E Mux 1 Register (GPIO128 - // to 143) -#define GPIO_O_GPEMUX2 0x108 // GPIO E Mux 2 Register (GPIO144 - // to 159) -#define GPIO_O_GPEDIR 0x10A // GPIO E Direction Register - // (GPIO128 to 159) -#define GPIO_O_GPEPUD 0x10C // GPIO E Pull Up Disable Register - // (GPIO128 to 159) -#define GPIO_O_GPEINV 0x110 // GPIO E Input Polarity Invert - // Registers (GPIO128 to 159) -#define GPIO_O_GPEODR 0x112 // GPIO E Open Drain Output - // Register (GPIO128 to GPIO159) -#define GPIO_O_GPEGMUX1 0x120 // GPIO E Peripheral Group Mux - // (GPIO128 to 143) -#define GPIO_O_GPEGMUX2 0x122 // GPIO E Peripheral Group Mux - // (GPIO144 to 159) -#define GPIO_O_GPECSEL1 0x128 // GPIO E Core Select Register - // (GPIO128 to 135) -#define GPIO_O_GPECSEL2 0x12A // GPIO E Core Select Register - // (GPIO136 to 143) -#define GPIO_O_GPECSEL3 0x12C // GPIO E Core Select Register - // (GPIO144 to 151) -#define GPIO_O_GPECSEL4 0x12E // GPIO E Core Select Register - // (GPIO152 to 159) -#define GPIO_O_GPELOCK 0x13C // GPIO E Lock Configuration - // Register (GPIO128 to 159) -#define GPIO_O_GPECR 0x13E // GPIO E Lock Commit Register - // (GPIO128 to 159) -#define GPIO_O_GPFCTRL 0x140 // GPIO F Qualification Sampling - // Period Control (GPIO160 to - // 168) -#define GPIO_O_GPFQSEL1 0x142 // GPIO F Qualifier Select 1 - // Register (GPIO160 to 168) -#define GPIO_O_GPFMUX1 0x146 // GPIO F Mux 1 Register (GPIO160 - // to 168) -#define GPIO_O_GPFDIR 0x14A // GPIO F Direction Register - // (GPIO160 to 168) -#define GPIO_O_GPFPUD 0x14C // GPIO F Pull Up Disable Register - // (GPIO160 to 168) -#define GPIO_O_GPFINV 0x150 // GPIO F Input Polarity Invert - // Registers (GPIO160 to 168) -#define GPIO_O_GPFODR 0x152 // GPIO F Open Drain Output - // Register (GPIO160 to GPIO168) -#define GPIO_O_GPFGMUX1 0x160 // GPIO F Peripheral Group Mux - // (GPIO160 to 168) -#define GPIO_O_GPFCSEL1 0x168 // GPIO F Core Select Register - // (GPIO160 to 167) -#define GPIO_O_GPFCSEL2 0x16A // GPIO F Core Select Register - // (GPIO168) -#define GPIO_O_GPFLOCK 0x17C // GPIO F Lock Configuration - // Register (GPIO160 to 168) -#define GPIO_O_GPFCR 0x17E // GPIO F Lock Commit Register - // (GPIO160 to 168) -#define GPIO_O_GPADAT 0x0 // GPIO A Data Register (GPIO0 to - // 31) -#define GPIO_O_GPASET 0x2 // GPIO A Data Set Register (GPIO0 - // to 31) -#define GPIO_O_GPACLEAR 0x4 // GPIO A Data Clear Register - // (GPIO0 to 31) -#define GPIO_O_GPATOGGLE 0x6 // GPIO A Data Toggle Register - // (GPIO0 to 31) -#define GPIO_O_GPBDAT 0x8 // GPIO B Data Register (GPIO32 to - // 63) -#define GPIO_O_GPBSET 0xA // GPIO B Data Set Register - // (GPIO32 to 63) -#define GPIO_O_GPBCLEAR 0xC // GPIO B Data Clear Register - // (GPIO32 to 63) -#define GPIO_O_GPBTOGGLE 0xE // GPIO B Data Toggle Register - // (GPIO32 to 63) -#define GPIO_O_GPCDAT 0x10 // GPIO C Data Register (GPIO64 to - // 95) -#define GPIO_O_GPCSET 0x12 // GPIO C Data Set Register - // (GPIO64 to 95) -#define GPIO_O_GPCCLEAR 0x14 // GPIO C Data Clear Register - // (GPIO64 to 95) -#define GPIO_O_GPCTOGGLE 0x16 // GPIO C Data Toggle Register - // (GPIO64 to 95) -#define GPIO_O_GPDDAT 0x18 // GPIO D Data Register (GPIO96 to - // 127) -#define GPIO_O_GPDSET 0x1A // GPIO D Data Set Register - // (GPIO96 to 127) -#define GPIO_O_GPDCLEAR 0x1C // GPIO D Data Clear Register - // (GPIO96 to 127) -#define GPIO_O_GPDTOGGLE 0x1E // GPIO D Data Toggle Register - // (GPIO96 to 127) -#define GPIO_O_GPEDAT 0x20 // GPIO E Data Register (GPIO128 - // to 159) -#define GPIO_O_GPESET 0x22 // GPIO E Data Set Register - // (GPIO128 to 159) -#define GPIO_O_GPECLEAR 0x24 // GPIO E Data Clear Register - // (GPIO128 to 159) -#define GPIO_O_GPETOGGLE 0x26 // GPIO E Data Toggle Register - // (GPIO128 to 159) -#define GPIO_O_GPFDAT 0x28 // GPIO F Data Register (GPIO160 - // to 168) -#define GPIO_O_GPFSET 0x2A // GPIO F Data Set Register - // (GPIO160 to 168) -#define GPIO_O_GPFCLEAR 0x2C // GPIO F Data Clear Register - // (GPIO160 to 168) -#define GPIO_O_GPFTOGGLE 0x2E // GPIO F Data Toggle Register - // (GPIO160 to 168) - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACTRL register -// -//***************************************************************************** -#define GPIO_GPACTRL_QUALPRD0_S 0 -#define GPIO_GPACTRL_QUALPRD0_M 0xFF // Qualification sampling period - // for GPIO0 to GPIO7 -#define GPIO_GPACTRL_QUALPRD1_S 8 -#define GPIO_GPACTRL_QUALPRD1_M 0xFF00 // Qualification sampling period - // for GPIO8 to GPIO15 -#define GPIO_GPACTRL_QUALPRD2_S 16 -#define GPIO_GPACTRL_QUALPRD2_M 0xFF0000 // Qualification sampling period - // for GPIO16 to GPIO23 -#define GPIO_GPACTRL_QUALPRD3_S 24 -#define GPIO_GPACTRL_QUALPRD3_M 0xFF000000 // Qualification sampling period - // for GPIO24 to GPIO31 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAQSEL1 register -// -//***************************************************************************** -#define GPIO_GPAQSEL1_GPIO0_S 0 -#define GPIO_GPAQSEL1_GPIO0_M 0x3 // Select input qualification type - // for GPIO0 -#define GPIO_GPAQSEL1_GPIO1_S 2 -#define GPIO_GPAQSEL1_GPIO1_M 0xC // Select input qualification type - // for GPIO1 -#define GPIO_GPAQSEL1_GPIO2_S 4 -#define GPIO_GPAQSEL1_GPIO2_M 0x30 // Select input qualification type - // for GPIO2 -#define GPIO_GPAQSEL1_GPIO3_S 6 -#define GPIO_GPAQSEL1_GPIO3_M 0xC0 // Select input qualification type - // for GPIO3 -#define GPIO_GPAQSEL1_GPIO4_S 8 -#define GPIO_GPAQSEL1_GPIO4_M 0x300 // Select input qualification type - // for GPIO4 -#define GPIO_GPAQSEL1_GPIO5_S 10 -#define GPIO_GPAQSEL1_GPIO5_M 0xC00 // Select input qualification type - // for GPIO5 -#define GPIO_GPAQSEL1_GPIO6_S 12 -#define GPIO_GPAQSEL1_GPIO6_M 0x3000 // Select input qualification type - // for GPIO6 -#define GPIO_GPAQSEL1_GPIO7_S 14 -#define GPIO_GPAQSEL1_GPIO7_M 0xC000 // Select input qualification type - // for GPIO7 -#define GPIO_GPAQSEL1_GPIO8_S 16 -#define GPIO_GPAQSEL1_GPIO8_M 0x30000 // Select input qualification type - // for GPIO8 -#define GPIO_GPAQSEL1_GPIO9_S 18 -#define GPIO_GPAQSEL1_GPIO9_M 0xC0000 // Select input qualification type - // for GPIO9 -#define GPIO_GPAQSEL1_GPIO10_S 20 -#define GPIO_GPAQSEL1_GPIO10_M 0x300000 // Select input qualification type - // for GPIO10 -#define GPIO_GPAQSEL1_GPIO11_S 22 -#define GPIO_GPAQSEL1_GPIO11_M 0xC00000 // Select input qualification type - // for GPIO11 -#define GPIO_GPAQSEL1_GPIO12_S 24 -#define GPIO_GPAQSEL1_GPIO12_M 0x3000000 // Select input qualification type - // for GPIO12 -#define GPIO_GPAQSEL1_GPIO13_S 26 -#define GPIO_GPAQSEL1_GPIO13_M 0xC000000 // Select input qualification type - // for GPIO13 -#define GPIO_GPAQSEL1_GPIO14_S 28 -#define GPIO_GPAQSEL1_GPIO14_M 0x30000000 // Select input qualification type - // for GPIO14 -#define GPIO_GPAQSEL1_GPIO15_S 30 -#define GPIO_GPAQSEL1_GPIO15_M 0xC0000000 // Select input qualification type - // for GPIO15 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAQSEL2 register -// -//***************************************************************************** -#define GPIO_GPAQSEL2_GPIO16_S 0 -#define GPIO_GPAQSEL2_GPIO16_M 0x3 // Select input qualification type - // for GPIO16 -#define GPIO_GPAQSEL2_GPIO17_S 2 -#define GPIO_GPAQSEL2_GPIO17_M 0xC // Select input qualification type - // for GPIO17 -#define GPIO_GPAQSEL2_GPIO18_S 4 -#define GPIO_GPAQSEL2_GPIO18_M 0x30 // Select input qualification type - // for GPIO18 -#define GPIO_GPAQSEL2_GPIO19_S 6 -#define GPIO_GPAQSEL2_GPIO19_M 0xC0 // Select input qualification type - // for GPIO19 -#define GPIO_GPAQSEL2_GPIO20_S 8 -#define GPIO_GPAQSEL2_GPIO20_M 0x300 // Select input qualification type - // for GPIO20 -#define GPIO_GPAQSEL2_GPIO21_S 10 -#define GPIO_GPAQSEL2_GPIO21_M 0xC00 // Select input qualification type - // for GPIO21 -#define GPIO_GPAQSEL2_GPIO22_S 12 -#define GPIO_GPAQSEL2_GPIO22_M 0x3000 // Select input qualification type - // for GPIO22 -#define GPIO_GPAQSEL2_GPIO23_S 14 -#define GPIO_GPAQSEL2_GPIO23_M 0xC000 // Select input qualification type - // for GPIO23 -#define GPIO_GPAQSEL2_GPIO24_S 16 -#define GPIO_GPAQSEL2_GPIO24_M 0x30000 // Select input qualification type - // for GPIO24 -#define GPIO_GPAQSEL2_GPIO25_S 18 -#define GPIO_GPAQSEL2_GPIO25_M 0xC0000 // Select input qualification type - // for GPIO25 -#define GPIO_GPAQSEL2_GPIO26_S 20 -#define GPIO_GPAQSEL2_GPIO26_M 0x300000 // Select input qualification type - // for GPIO26 -#define GPIO_GPAQSEL2_GPIO27_S 22 -#define GPIO_GPAQSEL2_GPIO27_M 0xC00000 // Select input qualification type - // for GPIO27 -#define GPIO_GPAQSEL2_GPIO28_S 24 -#define GPIO_GPAQSEL2_GPIO28_M 0x3000000 // Select input qualification type - // for GPIO28 -#define GPIO_GPAQSEL2_GPIO29_S 26 -#define GPIO_GPAQSEL2_GPIO29_M 0xC000000 // Select input qualification type - // for GPIO29 -#define GPIO_GPAQSEL2_GPIO30_S 28 -#define GPIO_GPAQSEL2_GPIO30_M 0x30000000 // Select input qualification type - // for GPIO30 -#define GPIO_GPAQSEL2_GPIO31_S 30 -#define GPIO_GPAQSEL2_GPIO31_M 0xC0000000 // Select input qualification type - // for GPIO31 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAMUX1 register -// -//***************************************************************************** -#define GPIO_GPAMUX1_GPIO0_S 0 -#define GPIO_GPAMUX1_GPIO0_M 0x3 // Defines pin-muxing selection - // for GPIO0 -#define GPIO_GPAMUX1_GPIO1_S 2 -#define GPIO_GPAMUX1_GPIO1_M 0xC // Defines pin-muxing selection - // for GPIO1 -#define GPIO_GPAMUX1_GPIO2_S 4 -#define GPIO_GPAMUX1_GPIO2_M 0x30 // Defines pin-muxing selection - // for GPIO2 -#define GPIO_GPAMUX1_GPIO3_S 6 -#define GPIO_GPAMUX1_GPIO3_M 0xC0 // Defines pin-muxing selection - // for GPIO3 -#define GPIO_GPAMUX1_GPIO4_S 8 -#define GPIO_GPAMUX1_GPIO4_M 0x300 // Defines pin-muxing selection - // for GPIO4 -#define GPIO_GPAMUX1_GPIO5_S 10 -#define GPIO_GPAMUX1_GPIO5_M 0xC00 // Defines pin-muxing selection - // for GPIO5 -#define GPIO_GPAMUX1_GPIO6_S 12 -#define GPIO_GPAMUX1_GPIO6_M 0x3000 // Defines pin-muxing selection - // for GPIO6 -#define GPIO_GPAMUX1_GPIO7_S 14 -#define GPIO_GPAMUX1_GPIO7_M 0xC000 // Defines pin-muxing selection - // for GPIO7 -#define GPIO_GPAMUX1_GPIO8_S 16 -#define GPIO_GPAMUX1_GPIO8_M 0x30000 // Defines pin-muxing selection - // for GPIO8 -#define GPIO_GPAMUX1_GPIO9_S 18 -#define GPIO_GPAMUX1_GPIO9_M 0xC0000 // Defines pin-muxing selection - // for GPIO9 -#define GPIO_GPAMUX1_GPIO10_S 20 -#define GPIO_GPAMUX1_GPIO10_M 0x300000 // Defines pin-muxing selection - // for GPIO10 -#define GPIO_GPAMUX1_GPIO11_S 22 -#define GPIO_GPAMUX1_GPIO11_M 0xC00000 // Defines pin-muxing selection - // for GPIO11 -#define GPIO_GPAMUX1_GPIO12_S 24 -#define GPIO_GPAMUX1_GPIO12_M 0x3000000 // Defines pin-muxing selection - // for GPIO12 -#define GPIO_GPAMUX1_GPIO13_S 26 -#define GPIO_GPAMUX1_GPIO13_M 0xC000000 // Defines pin-muxing selection - // for GPIO13 -#define GPIO_GPAMUX1_GPIO14_S 28 -#define GPIO_GPAMUX1_GPIO14_M 0x30000000 // Defines pin-muxing selection - // for GPIO14 -#define GPIO_GPAMUX1_GPIO15_S 30 -#define GPIO_GPAMUX1_GPIO15_M 0xC0000000 // Defines pin-muxing selection - // for GPIO15 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAMUX2 register -// -//***************************************************************************** -#define GPIO_GPAMUX2_GPIO16_S 0 -#define GPIO_GPAMUX2_GPIO16_M 0x3 // Defines pin-muxing selection - // for GPIO16 -#define GPIO_GPAMUX2_GPIO17_S 2 -#define GPIO_GPAMUX2_GPIO17_M 0xC // Defines pin-muxing selection - // for GPIO17 -#define GPIO_GPAMUX2_GPIO18_S 4 -#define GPIO_GPAMUX2_GPIO18_M 0x30 // Defines pin-muxing selection - // for GPIO18 -#define GPIO_GPAMUX2_GPIO19_S 6 -#define GPIO_GPAMUX2_GPIO19_M 0xC0 // Defines pin-muxing selection - // for GPIO19 -#define GPIO_GPAMUX2_GPIO20_S 8 -#define GPIO_GPAMUX2_GPIO20_M 0x300 // Defines pin-muxing selection - // for GPIO20 -#define GPIO_GPAMUX2_GPIO21_S 10 -#define GPIO_GPAMUX2_GPIO21_M 0xC00 // Defines pin-muxing selection - // for GPIO21 -#define GPIO_GPAMUX2_GPIO22_S 12 -#define GPIO_GPAMUX2_GPIO22_M 0x3000 // Defines pin-muxing selection - // for GPIO22 -#define GPIO_GPAMUX2_GPIO23_S 14 -#define GPIO_GPAMUX2_GPIO23_M 0xC000 // Defines pin-muxing selection - // for GPIO23 -#define GPIO_GPAMUX2_GPIO24_S 16 -#define GPIO_GPAMUX2_GPIO24_M 0x30000 // Defines pin-muxing selection - // for GPIO24 -#define GPIO_GPAMUX2_GPIO25_S 18 -#define GPIO_GPAMUX2_GPIO25_M 0xC0000 // Defines pin-muxing selection - // for GPIO25 -#define GPIO_GPAMUX2_GPIO26_S 20 -#define GPIO_GPAMUX2_GPIO26_M 0x300000 // Defines pin-muxing selection - // for GPIO26 -#define GPIO_GPAMUX2_GPIO27_S 22 -#define GPIO_GPAMUX2_GPIO27_M 0xC00000 // Defines pin-muxing selection - // for GPIO27 -#define GPIO_GPAMUX2_GPIO28_S 24 -#define GPIO_GPAMUX2_GPIO28_M 0x3000000 // Defines pin-muxing selection - // for GPIO28 -#define GPIO_GPAMUX2_GPIO29_S 26 -#define GPIO_GPAMUX2_GPIO29_M 0xC000000 // Defines pin-muxing selection - // for GPIO29 -#define GPIO_GPAMUX2_GPIO30_S 28 -#define GPIO_GPAMUX2_GPIO30_M 0x30000000 // Defines pin-muxing selection - // for GPIO30 -#define GPIO_GPAMUX2_GPIO31_S 30 -#define GPIO_GPAMUX2_GPIO31_M 0xC0000000 // Defines pin-muxing selection - // for GPIO31 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPADIR register -// -//***************************************************************************** -#define GPIO_GPADIR_GPIO0 0x1 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO1 0x2 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO2 0x4 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO3 0x8 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO4 0x10 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO5 0x20 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO6 0x40 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO7 0x80 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO8 0x100 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO9 0x200 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO10 0x400 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO11 0x800 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO12 0x1000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO13 0x2000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO14 0x4000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO15 0x8000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO16 0x10000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO17 0x20000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO18 0x40000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO19 0x80000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO20 0x100000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO21 0x200000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO22 0x400000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO23 0x800000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO24 0x1000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO25 0x2000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO26 0x4000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO27 0x8000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO28 0x10000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO29 0x20000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO30 0x40000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPADIR_GPIO31 0x80000000 // Defines direction for this pin - // in GPIO mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAPUD register -// -//***************************************************************************** -#define GPIO_GPAPUD_GPIO0 0x1 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO1 0x2 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO2 0x4 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO3 0x8 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO4 0x10 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO5 0x20 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO6 0x40 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO7 0x80 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO8 0x100 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO9 0x200 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO10 0x400 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO11 0x800 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO12 0x1000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO13 0x2000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO14 0x4000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO15 0x8000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO16 0x10000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO17 0x20000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO18 0x40000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO19 0x80000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO20 0x100000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO21 0x200000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO22 0x400000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO23 0x800000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO24 0x1000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO25 0x2000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO26 0x4000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO27 0x8000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO28 0x10000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO29 0x20000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO30 0x40000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPAPUD_GPIO31 0x80000000 // Pull-Up Disable control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAINV register -// -//***************************************************************************** -#define GPIO_GPAINV_GPIO0 0x1 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO1 0x2 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO2 0x4 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO3 0x8 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO4 0x10 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO5 0x20 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO6 0x40 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO7 0x80 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO8 0x100 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO9 0x200 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO10 0x400 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO11 0x800 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO12 0x1000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO13 0x2000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO14 0x4000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO15 0x8000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO16 0x10000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO17 0x20000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO18 0x40000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO19 0x80000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO20 0x100000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO21 0x200000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO22 0x400000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO23 0x800000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO24 0x1000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO25 0x2000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO26 0x4000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO27 0x8000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO28 0x10000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO29 0x20000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO30 0x40000000 // Input inversion control for - // this pin -#define GPIO_GPAINV_GPIO31 0x80000000 // Input inversion control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAODR register -// -//***************************************************************************** -#define GPIO_GPAODR_GPIO0 0x1 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO1 0x2 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO2 0x4 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO3 0x8 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO4 0x10 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO5 0x20 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO6 0x40 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO7 0x80 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO8 0x100 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO9 0x200 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO10 0x400 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO11 0x800 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO12 0x1000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO13 0x2000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO14 0x4000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO15 0x8000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO16 0x10000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO17 0x20000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO18 0x40000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO19 0x80000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO20 0x100000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO21 0x200000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO22 0x400000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO23 0x800000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO24 0x1000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO25 0x2000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO26 0x4000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO27 0x8000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO28 0x10000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO29 0x20000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO30 0x40000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPAODR_GPIO31 0x80000000 // Outpout Open-Drain control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAGMUX1 register -// -//***************************************************************************** -#define GPIO_GPAGMUX1_GPIO0_S 0 -#define GPIO_GPAGMUX1_GPIO0_M 0x3 // Defines pin-muxing selection - // for GPIO0 -#define GPIO_GPAGMUX1_GPIO1_S 2 -#define GPIO_GPAGMUX1_GPIO1_M 0xC // Defines pin-muxing selection - // for GPIO1 -#define GPIO_GPAGMUX1_GPIO2_S 4 -#define GPIO_GPAGMUX1_GPIO2_M 0x30 // Defines pin-muxing selection - // for GPIO2 -#define GPIO_GPAGMUX1_GPIO3_S 6 -#define GPIO_GPAGMUX1_GPIO3_M 0xC0 // Defines pin-muxing selection - // for GPIO3 -#define GPIO_GPAGMUX1_GPIO4_S 8 -#define GPIO_GPAGMUX1_GPIO4_M 0x300 // Defines pin-muxing selection - // for GPIO4 -#define GPIO_GPAGMUX1_GPIO5_S 10 -#define GPIO_GPAGMUX1_GPIO5_M 0xC00 // Defines pin-muxing selection - // for GPIO5 -#define GPIO_GPAGMUX1_GPIO6_S 12 -#define GPIO_GPAGMUX1_GPIO6_M 0x3000 // Defines pin-muxing selection - // for GPIO6 -#define GPIO_GPAGMUX1_GPIO7_S 14 -#define GPIO_GPAGMUX1_GPIO7_M 0xC000 // Defines pin-muxing selection - // for GPIO7 -#define GPIO_GPAGMUX1_GPIO8_S 16 -#define GPIO_GPAGMUX1_GPIO8_M 0x30000 // Defines pin-muxing selection - // for GPIO8 -#define GPIO_GPAGMUX1_GPIO9_S 18 -#define GPIO_GPAGMUX1_GPIO9_M 0xC0000 // Defines pin-muxing selection - // for GPIO9 -#define GPIO_GPAGMUX1_GPIO10_S 20 -#define GPIO_GPAGMUX1_GPIO10_M 0x300000 // Defines pin-muxing selection - // for GPIO10 -#define GPIO_GPAGMUX1_GPIO11_S 22 -#define GPIO_GPAGMUX1_GPIO11_M 0xC00000 // Defines pin-muxing selection - // for GPIO11 -#define GPIO_GPAGMUX1_GPIO12_S 24 -#define GPIO_GPAGMUX1_GPIO12_M 0x3000000 // Defines pin-muxing selection - // for GPIO12 -#define GPIO_GPAGMUX1_GPIO13_S 26 -#define GPIO_GPAGMUX1_GPIO13_M 0xC000000 // Defines pin-muxing selection - // for GPIO13 -#define GPIO_GPAGMUX1_GPIO14_S 28 -#define GPIO_GPAGMUX1_GPIO14_M 0x30000000 // Defines pin-muxing selection - // for GPIO14 -#define GPIO_GPAGMUX1_GPIO15_S 30 -#define GPIO_GPAGMUX1_GPIO15_M 0xC0000000 // Defines pin-muxing selection - // for GPIO15 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPAGMUX2 register -// -//***************************************************************************** -#define GPIO_GPAGMUX2_GPIO16_S 0 -#define GPIO_GPAGMUX2_GPIO16_M 0x3 // Defines pin-muxing selection - // for GPIO16 -#define GPIO_GPAGMUX2_GPIO17_S 2 -#define GPIO_GPAGMUX2_GPIO17_M 0xC // Defines pin-muxing selection - // for GPIO17 -#define GPIO_GPAGMUX2_GPIO18_S 4 -#define GPIO_GPAGMUX2_GPIO18_M 0x30 // Defines pin-muxing selection - // for GPIO18 -#define GPIO_GPAGMUX2_GPIO19_S 6 -#define GPIO_GPAGMUX2_GPIO19_M 0xC0 // Defines pin-muxing selection - // for GPIO19 -#define GPIO_GPAGMUX2_GPIO20_S 8 -#define GPIO_GPAGMUX2_GPIO20_M 0x300 // Defines pin-muxing selection - // for GPIO20 -#define GPIO_GPAGMUX2_GPIO21_S 10 -#define GPIO_GPAGMUX2_GPIO21_M 0xC00 // Defines pin-muxing selection - // for GPIO21 -#define GPIO_GPAGMUX2_GPIO22_S 12 -#define GPIO_GPAGMUX2_GPIO22_M 0x3000 // Defines pin-muxing selection - // for GPIO22 -#define GPIO_GPAGMUX2_GPIO23_S 14 -#define GPIO_GPAGMUX2_GPIO23_M 0xC000 // Defines pin-muxing selection - // for GPIO23 -#define GPIO_GPAGMUX2_GPIO24_S 16 -#define GPIO_GPAGMUX2_GPIO24_M 0x30000 // Defines pin-muxing selection - // for GPIO24 -#define GPIO_GPAGMUX2_GPIO25_S 18 -#define GPIO_GPAGMUX2_GPIO25_M 0xC0000 // Defines pin-muxing selection - // for GPIO25 -#define GPIO_GPAGMUX2_GPIO26_S 20 -#define GPIO_GPAGMUX2_GPIO26_M 0x300000 // Defines pin-muxing selection - // for GPIO26 -#define GPIO_GPAGMUX2_GPIO27_S 22 -#define GPIO_GPAGMUX2_GPIO27_M 0xC00000 // Defines pin-muxing selection - // for GPIO27 -#define GPIO_GPAGMUX2_GPIO28_S 24 -#define GPIO_GPAGMUX2_GPIO28_M 0x3000000 // Defines pin-muxing selection - // for GPIO28 -#define GPIO_GPAGMUX2_GPIO29_S 26 -#define GPIO_GPAGMUX2_GPIO29_M 0xC000000 // Defines pin-muxing selection - // for GPIO29 -#define GPIO_GPAGMUX2_GPIO30_S 28 -#define GPIO_GPAGMUX2_GPIO30_M 0x30000000 // Defines pin-muxing selection - // for GPIO30 -#define GPIO_GPAGMUX2_GPIO31_S 30 -#define GPIO_GPAGMUX2_GPIO31_M 0xC0000000 // Defines pin-muxing selection - // for GPIO31 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACSEL1 register -// -//***************************************************************************** -#define GPIO_GPACSEL1_GPIO0_S 0 -#define GPIO_GPACSEL1_GPIO0_M 0xF // GPIO0 Master CPU Select -#define GPIO_GPACSEL1_GPIO1_S 4 -#define GPIO_GPACSEL1_GPIO1_M 0xF0 // GPIO1 Master CPU Select -#define GPIO_GPACSEL1_GPIO2_S 8 -#define GPIO_GPACSEL1_GPIO2_M 0xF00 // GPIO2 Master CPU Select -#define GPIO_GPACSEL1_GPIO3_S 12 -#define GPIO_GPACSEL1_GPIO3_M 0xF000 // GPIO3 Master CPU Select -#define GPIO_GPACSEL1_GPIO4_S 16 -#define GPIO_GPACSEL1_GPIO4_M 0xF0000 // GPIO4 Master CPU Select -#define GPIO_GPACSEL1_GPIO5_S 20 -#define GPIO_GPACSEL1_GPIO5_M 0xF00000 // GPIO5 Master CPU Select -#define GPIO_GPACSEL1_GPIO6_S 24 -#define GPIO_GPACSEL1_GPIO6_M 0xF000000 // GPIO6 Master CPU Select -#define GPIO_GPACSEL1_GPIO7_S 28 -#define GPIO_GPACSEL1_GPIO7_M 0xF0000000 // GPIO7 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACSEL2 register -// -//***************************************************************************** -#define GPIO_GPACSEL2_GPIO8_S 0 -#define GPIO_GPACSEL2_GPIO8_M 0xF // GPIO8 Master CPU Select -#define GPIO_GPACSEL2_GPIO9_S 4 -#define GPIO_GPACSEL2_GPIO9_M 0xF0 // GPIO9 Master CPU Select -#define GPIO_GPACSEL2_GPIO10_S 8 -#define GPIO_GPACSEL2_GPIO10_M 0xF00 // GPIO10 Master CPU Select -#define GPIO_GPACSEL2_GPIO11_S 12 -#define GPIO_GPACSEL2_GPIO11_M 0xF000 // GPIO11 Master CPU Select -#define GPIO_GPACSEL2_GPIO12_S 16 -#define GPIO_GPACSEL2_GPIO12_M 0xF0000 // GPIO12 Master CPU Select -#define GPIO_GPACSEL2_GPIO13_S 20 -#define GPIO_GPACSEL2_GPIO13_M 0xF00000 // GPIO13 Master CPU Select -#define GPIO_GPACSEL2_GPIO14_S 24 -#define GPIO_GPACSEL2_GPIO14_M 0xF000000 // GPIO14 Master CPU Select -#define GPIO_GPACSEL2_GPIO15_S 28 -#define GPIO_GPACSEL2_GPIO15_M 0xF0000000 // GPIO15 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACSEL3 register -// -//***************************************************************************** -#define GPIO_GPACSEL3_GPIO16_S 0 -#define GPIO_GPACSEL3_GPIO16_M 0xF // GPIO16 Master CPU Select -#define GPIO_GPACSEL3_GPIO17_S 4 -#define GPIO_GPACSEL3_GPIO17_M 0xF0 // GPIO17 Master CPU Select -#define GPIO_GPACSEL3_GPIO18_S 8 -#define GPIO_GPACSEL3_GPIO18_M 0xF00 // GPIO18 Master CPU Select -#define GPIO_GPACSEL3_GPIO19_S 12 -#define GPIO_GPACSEL3_GPIO19_M 0xF000 // GPIO19 Master CPU Select -#define GPIO_GPACSEL3_GPIO20_S 16 -#define GPIO_GPACSEL3_GPIO20_M 0xF0000 // GPIO20 Master CPU Select -#define GPIO_GPACSEL3_GPIO21_S 20 -#define GPIO_GPACSEL3_GPIO21_M 0xF00000 // GPIO21 Master CPU Select -#define GPIO_GPACSEL3_GPIO22_S 24 -#define GPIO_GPACSEL3_GPIO22_M 0xF000000 // GPIO22 Master CPU Select -#define GPIO_GPACSEL3_GPIO23_S 28 -#define GPIO_GPACSEL3_GPIO23_M 0xF0000000 // GPIO23 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACSEL4 register -// -//***************************************************************************** -#define GPIO_GPACSEL4_GPIO24_S 0 -#define GPIO_GPACSEL4_GPIO24_M 0xF // GPIO24 Master CPU Select -#define GPIO_GPACSEL4_GPIO25_S 4 -#define GPIO_GPACSEL4_GPIO25_M 0xF0 // GPIO25 Master CPU Select -#define GPIO_GPACSEL4_GPIO26_S 8 -#define GPIO_GPACSEL4_GPIO26_M 0xF00 // GPIO26 Master CPU Select -#define GPIO_GPACSEL4_GPIO27_S 12 -#define GPIO_GPACSEL4_GPIO27_M 0xF000 // GPIO27 Master CPU Select -#define GPIO_GPACSEL4_GPIO28_S 16 -#define GPIO_GPACSEL4_GPIO28_M 0xF0000 // GPIO28 Master CPU Select -#define GPIO_GPACSEL4_GPIO29_S 20 -#define GPIO_GPACSEL4_GPIO29_M 0xF00000 // GPIO29 Master CPU Select -#define GPIO_GPACSEL4_GPIO30_S 24 -#define GPIO_GPACSEL4_GPIO30_M 0xF000000 // GPIO30 Master CPU Select -#define GPIO_GPACSEL4_GPIO31_S 28 -#define GPIO_GPACSEL4_GPIO31_M 0xF0000000 // GPIO31 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPALOCK register -// -//***************************************************************************** -#define GPIO_GPALOCK_GPIO0 0x1 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO1 0x2 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO2 0x4 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO3 0x8 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO4 0x10 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO5 0x20 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO6 0x40 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO7 0x80 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO8 0x100 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO9 0x200 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO10 0x400 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO11 0x800 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO12 0x1000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO13 0x2000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO14 0x4000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO15 0x8000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO16 0x10000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO17 0x20000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO18 0x40000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO19 0x80000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO20 0x100000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO21 0x200000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO22 0x400000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO23 0x800000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO24 0x1000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO25 0x2000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO26 0x4000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO27 0x8000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO28 0x10000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO29 0x20000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO30 0x40000000 // Configuration Lock bit for this - // pin -#define GPIO_GPALOCK_GPIO31 0x80000000 // Configuration Lock bit for this - // pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACR register -// -//***************************************************************************** -#define GPIO_GPACR_GPIO0 0x1 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO1 0x2 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO2 0x4 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO3 0x8 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO4 0x10 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO5 0x20 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO6 0x40 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO7 0x80 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO8 0x100 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO9 0x200 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO10 0x400 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO11 0x800 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO12 0x1000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO13 0x2000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO14 0x4000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO15 0x8000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO16 0x10000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO17 0x20000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO18 0x40000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO19 0x80000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO20 0x100000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO21 0x200000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO22 0x400000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO23 0x800000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO24 0x1000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO25 0x2000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO26 0x4000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO27 0x8000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO28 0x10000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO29 0x20000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO30 0x40000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPACR_GPIO31 0x80000000 // Configuration lock commit bit - // for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCTRL register -// -//***************************************************************************** -#define GPIO_GPBCTRL_QUALPRD0_S 0 -#define GPIO_GPBCTRL_QUALPRD0_M 0xFF // Qualification sampling period - // for GPIO32 to GPIO39 -#define GPIO_GPBCTRL_QUALPRD1_S 8 -#define GPIO_GPBCTRL_QUALPRD1_M 0xFF00 // Qualification sampling period - // for GPIO40 to GPIO47 -#define GPIO_GPBCTRL_QUALPRD2_S 16 -#define GPIO_GPBCTRL_QUALPRD2_M 0xFF0000 // Qualification sampling period - // for GPIO48 to GPIO55 -#define GPIO_GPBCTRL_QUALPRD3_S 24 -#define GPIO_GPBCTRL_QUALPRD3_M 0xFF000000 // Qualification sampling period - // for GPIO56 to GPIO63 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBQSEL1 register -// -//***************************************************************************** -#define GPIO_GPBQSEL1_GPIO32_S 0 -#define GPIO_GPBQSEL1_GPIO32_M 0x3 // Select input qualification type - // for GPIO32 -#define GPIO_GPBQSEL1_GPIO33_S 2 -#define GPIO_GPBQSEL1_GPIO33_M 0xC // Select input qualification type - // for GPIO33 -#define GPIO_GPBQSEL1_GPIO34_S 4 -#define GPIO_GPBQSEL1_GPIO34_M 0x30 // Select input qualification type - // for GPIO34 -#define GPIO_GPBQSEL1_GPIO35_S 6 -#define GPIO_GPBQSEL1_GPIO35_M 0xC0 // Select input qualification type - // for GPIO35 -#define GPIO_GPBQSEL1_GPIO36_S 8 -#define GPIO_GPBQSEL1_GPIO36_M 0x300 // Select input qualification type - // for GPIO36 -#define GPIO_GPBQSEL1_GPIO37_S 10 -#define GPIO_GPBQSEL1_GPIO37_M 0xC00 // Select input qualification type - // for GPIO37 -#define GPIO_GPBQSEL1_GPIO38_S 12 -#define GPIO_GPBQSEL1_GPIO38_M 0x3000 // Select input qualification type - // for GPIO38 -#define GPIO_GPBQSEL1_GPIO39_S 14 -#define GPIO_GPBQSEL1_GPIO39_M 0xC000 // Select input qualification type - // for GPIO39 -#define GPIO_GPBQSEL1_GPIO40_S 16 -#define GPIO_GPBQSEL1_GPIO40_M 0x30000 // Select input qualification type - // for GPIO40 -#define GPIO_GPBQSEL1_GPIO41_S 18 -#define GPIO_GPBQSEL1_GPIO41_M 0xC0000 // Select input qualification type - // for GPIO41 -#define GPIO_GPBQSEL1_GPIO42_S 20 -#define GPIO_GPBQSEL1_GPIO42_M 0x300000 // Select input qualification type - // for GPIO42 -#define GPIO_GPBQSEL1_GPIO43_S 22 -#define GPIO_GPBQSEL1_GPIO43_M 0xC00000 // Select input qualification type - // for GPIO43 -#define GPIO_GPBQSEL1_GPIO44_S 24 -#define GPIO_GPBQSEL1_GPIO44_M 0x3000000 // Select input qualification type - // for GPIO44 -#define GPIO_GPBQSEL1_GPIO45_S 26 -#define GPIO_GPBQSEL1_GPIO45_M 0xC000000 // Select input qualification type - // for GPIO45 -#define GPIO_GPBQSEL1_GPIO46_S 28 -#define GPIO_GPBQSEL1_GPIO46_M 0x30000000 // Select input qualification type - // for GPIO46 -#define GPIO_GPBQSEL1_GPIO47_S 30 -#define GPIO_GPBQSEL1_GPIO47_M 0xC0000000 // Select input qualification type - // for GPIO47 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBQSEL2 register -// -//***************************************************************************** -#define GPIO_GPBQSEL2_GPIO48_S 0 -#define GPIO_GPBQSEL2_GPIO48_M 0x3 // Select input qualification type - // for GPIO48 -#define GPIO_GPBQSEL2_GPIO49_S 2 -#define GPIO_GPBQSEL2_GPIO49_M 0xC // Select input qualification type - // for GPIO49 -#define GPIO_GPBQSEL2_GPIO50_S 4 -#define GPIO_GPBQSEL2_GPIO50_M 0x30 // Select input qualification type - // for GPIO50 -#define GPIO_GPBQSEL2_GPIO51_S 6 -#define GPIO_GPBQSEL2_GPIO51_M 0xC0 // Select input qualification type - // for GPIO51 -#define GPIO_GPBQSEL2_GPIO52_S 8 -#define GPIO_GPBQSEL2_GPIO52_M 0x300 // Select input qualification type - // for GPIO52 -#define GPIO_GPBQSEL2_GPIO53_S 10 -#define GPIO_GPBQSEL2_GPIO53_M 0xC00 // Select input qualification type - // for GPIO53 -#define GPIO_GPBQSEL2_GPIO54_S 12 -#define GPIO_GPBQSEL2_GPIO54_M 0x3000 // Select input qualification type - // for GPIO54 -#define GPIO_GPBQSEL2_GPIO55_S 14 -#define GPIO_GPBQSEL2_GPIO55_M 0xC000 // Select input qualification type - // for GPIO55 -#define GPIO_GPBQSEL2_GPIO56_S 16 -#define GPIO_GPBQSEL2_GPIO56_M 0x30000 // Select input qualification type - // for GPIO56 -#define GPIO_GPBQSEL2_GPIO57_S 18 -#define GPIO_GPBQSEL2_GPIO57_M 0xC0000 // Select input qualification type - // for GPIO57 -#define GPIO_GPBQSEL2_GPIO58_S 20 -#define GPIO_GPBQSEL2_GPIO58_M 0x300000 // Select input qualification type - // for GPIO58 -#define GPIO_GPBQSEL2_GPIO59_S 22 -#define GPIO_GPBQSEL2_GPIO59_M 0xC00000 // Select input qualification type - // for GPIO59 -#define GPIO_GPBQSEL2_GPIO60_S 24 -#define GPIO_GPBQSEL2_GPIO60_M 0x3000000 // Select input qualification type - // for GPIO60 -#define GPIO_GPBQSEL2_GPIO61_S 26 -#define GPIO_GPBQSEL2_GPIO61_M 0xC000000 // Select input qualification type - // for GPIO61 -#define GPIO_GPBQSEL2_GPIO62_S 28 -#define GPIO_GPBQSEL2_GPIO62_M 0x30000000 // Select input qualification type - // for GPIO62 -#define GPIO_GPBQSEL2_GPIO63_S 30 -#define GPIO_GPBQSEL2_GPIO63_M 0xC0000000 // Select input qualification type - // for GPIO63 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBMUX1 register -// -//***************************************************************************** -#define GPIO_GPBMUX1_GPIO32_S 0 -#define GPIO_GPBMUX1_GPIO32_M 0x3 // Defines pin-muxing selection - // for GPIO32 -#define GPIO_GPBMUX1_GPIO33_S 2 -#define GPIO_GPBMUX1_GPIO33_M 0xC // Defines pin-muxing selection - // for GPIO33 -#define GPIO_GPBMUX1_GPIO34_S 4 -#define GPIO_GPBMUX1_GPIO34_M 0x30 // Defines pin-muxing selection - // for GPIO34 -#define GPIO_GPBMUX1_GPIO35_S 6 -#define GPIO_GPBMUX1_GPIO35_M 0xC0 // Defines pin-muxing selection - // for GPIO35 -#define GPIO_GPBMUX1_GPIO36_S 8 -#define GPIO_GPBMUX1_GPIO36_M 0x300 // Defines pin-muxing selection - // for GPIO36 -#define GPIO_GPBMUX1_GPIO37_S 10 -#define GPIO_GPBMUX1_GPIO37_M 0xC00 // Defines pin-muxing selection - // for GPIO37 -#define GPIO_GPBMUX1_GPIO38_S 12 -#define GPIO_GPBMUX1_GPIO38_M 0x3000 // Defines pin-muxing selection - // for GPIO38 -#define GPIO_GPBMUX1_GPIO39_S 14 -#define GPIO_GPBMUX1_GPIO39_M 0xC000 // Defines pin-muxing selection - // for GPIO39 -#define GPIO_GPBMUX1_GPIO40_S 16 -#define GPIO_GPBMUX1_GPIO40_M 0x30000 // Defines pin-muxing selection - // for GPIO40 -#define GPIO_GPBMUX1_GPIO41_S 18 -#define GPIO_GPBMUX1_GPIO41_M 0xC0000 // Defines pin-muxing selection - // for GPIO41 -#define GPIO_GPBMUX1_GPIO42_S 20 -#define GPIO_GPBMUX1_GPIO42_M 0x300000 // Defines pin-muxing selection - // for GPIO42 -#define GPIO_GPBMUX1_GPIO43_S 22 -#define GPIO_GPBMUX1_GPIO43_M 0xC00000 // Defines pin-muxing selection - // for GPIO43 -#define GPIO_GPBMUX1_GPIO44_S 24 -#define GPIO_GPBMUX1_GPIO44_M 0x3000000 // Defines pin-muxing selection - // for GPIO44 -#define GPIO_GPBMUX1_GPIO45_S 26 -#define GPIO_GPBMUX1_GPIO45_M 0xC000000 // Defines pin-muxing selection - // for GPIO45 -#define GPIO_GPBMUX1_GPIO46_S 28 -#define GPIO_GPBMUX1_GPIO46_M 0x30000000 // Defines pin-muxing selection - // for GPIO46 -#define GPIO_GPBMUX1_GPIO47_S 30 -#define GPIO_GPBMUX1_GPIO47_M 0xC0000000 // Defines pin-muxing selection - // for GPIO47 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBMUX2 register -// -//***************************************************************************** -#define GPIO_GPBMUX2_GPIO48_S 0 -#define GPIO_GPBMUX2_GPIO48_M 0x3 // Defines pin-muxing selection - // for GPIO48 -#define GPIO_GPBMUX2_GPIO49_S 2 -#define GPIO_GPBMUX2_GPIO49_M 0xC // Defines pin-muxing selection - // for GPIO49 -#define GPIO_GPBMUX2_GPIO50_S 4 -#define GPIO_GPBMUX2_GPIO50_M 0x30 // Defines pin-muxing selection - // for GPIO50 -#define GPIO_GPBMUX2_GPIO51_S 6 -#define GPIO_GPBMUX2_GPIO51_M 0xC0 // Defines pin-muxing selection - // for GPIO51 -#define GPIO_GPBMUX2_GPIO52_S 8 -#define GPIO_GPBMUX2_GPIO52_M 0x300 // Defines pin-muxing selection - // for GPIO52 -#define GPIO_GPBMUX2_GPIO53_S 10 -#define GPIO_GPBMUX2_GPIO53_M 0xC00 // Defines pin-muxing selection - // for GPIO53 -#define GPIO_GPBMUX2_GPIO54_S 12 -#define GPIO_GPBMUX2_GPIO54_M 0x3000 // Defines pin-muxing selection - // for GPIO54 -#define GPIO_GPBMUX2_GPIO55_S 14 -#define GPIO_GPBMUX2_GPIO55_M 0xC000 // Defines pin-muxing selection - // for GPIO55 -#define GPIO_GPBMUX2_GPIO56_S 16 -#define GPIO_GPBMUX2_GPIO56_M 0x30000 // Defines pin-muxing selection - // for GPIO56 -#define GPIO_GPBMUX2_GPIO57_S 18 -#define GPIO_GPBMUX2_GPIO57_M 0xC0000 // Defines pin-muxing selection - // for GPIO57 -#define GPIO_GPBMUX2_GPIO58_S 20 -#define GPIO_GPBMUX2_GPIO58_M 0x300000 // Defines pin-muxing selection - // for GPIO58 -#define GPIO_GPBMUX2_GPIO59_S 22 -#define GPIO_GPBMUX2_GPIO59_M 0xC00000 // Defines pin-muxing selection - // for GPIO59 -#define GPIO_GPBMUX2_GPIO60_S 24 -#define GPIO_GPBMUX2_GPIO60_M 0x3000000 // Defines pin-muxing selection - // for GPIO60 -#define GPIO_GPBMUX2_GPIO61_S 26 -#define GPIO_GPBMUX2_GPIO61_M 0xC000000 // Defines pin-muxing selection - // for GPIO61 -#define GPIO_GPBMUX2_GPIO62_S 28 -#define GPIO_GPBMUX2_GPIO62_M 0x30000000 // Defines pin-muxing selection - // for GPIO62 -#define GPIO_GPBMUX2_GPIO63_S 30 -#define GPIO_GPBMUX2_GPIO63_M 0xC0000000 // Defines pin-muxing selection - // for GPIO63 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBDIR register -// -//***************************************************************************** -#define GPIO_GPBDIR_GPIO32 0x1 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO33 0x2 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO34 0x4 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO35 0x8 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO36 0x10 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO37 0x20 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO38 0x40 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO39 0x80 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO40 0x100 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO41 0x200 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO42 0x400 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO43 0x800 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO44 0x1000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO45 0x2000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO46 0x4000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO47 0x8000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO48 0x10000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO49 0x20000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO50 0x40000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO51 0x80000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO52 0x100000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO53 0x200000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO54 0x400000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO55 0x800000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO56 0x1000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO57 0x2000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO58 0x4000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO59 0x8000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO60 0x10000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO61 0x20000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO62 0x40000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPBDIR_GPIO63 0x80000000 // Defines direction for this pin - // in GPIO mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBPUD register -// -//***************************************************************************** -#define GPIO_GPBPUD_GPIO32 0x1 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO33 0x2 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO34 0x4 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO35 0x8 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO36 0x10 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO37 0x20 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO38 0x40 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO39 0x80 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO40 0x100 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO41 0x200 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO42 0x400 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO43 0x800 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO44 0x1000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO45 0x2000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO46 0x4000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO47 0x8000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO48 0x10000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO49 0x20000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO50 0x40000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO51 0x80000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO52 0x100000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO53 0x200000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO54 0x400000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO55 0x800000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO56 0x1000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO57 0x2000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO58 0x4000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO59 0x8000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO60 0x10000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO61 0x20000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO62 0x40000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPBPUD_GPIO63 0x80000000 // Pull-Up Disable control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBINV register -// -//***************************************************************************** -#define GPIO_GPBINV_GPIO32 0x1 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO33 0x2 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO34 0x4 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO35 0x8 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO36 0x10 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO37 0x20 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO38 0x40 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO39 0x80 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO40 0x100 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO41 0x200 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO42 0x400 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO43 0x800 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO44 0x1000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO45 0x2000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO46 0x4000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO47 0x8000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO48 0x10000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO49 0x20000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO50 0x40000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO51 0x80000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO52 0x100000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO53 0x200000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO54 0x400000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO55 0x800000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO56 0x1000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO57 0x2000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO58 0x4000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO59 0x8000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO60 0x10000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO61 0x20000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO62 0x40000000 // Input inversion control for - // this pin -#define GPIO_GPBINV_GPIO63 0x80000000 // Input inversion control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBODR register -// -//***************************************************************************** -#define GPIO_GPBODR_GPIO32 0x1 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO33 0x2 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO34 0x4 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO35 0x8 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO36 0x10 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO37 0x20 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO38 0x40 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO39 0x80 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO40 0x100 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO41 0x200 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO42 0x400 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO43 0x800 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO44 0x1000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO45 0x2000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO46 0x4000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO47 0x8000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO48 0x10000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO49 0x20000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO50 0x40000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO51 0x80000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO52 0x100000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO53 0x200000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO54 0x400000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO55 0x800000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO56 0x1000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO57 0x2000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO58 0x4000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO59 0x8000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO60 0x10000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO61 0x20000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO62 0x40000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPBODR_GPIO63 0x80000000 // Outpout Open-Drain control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBAMSEL register -// -//***************************************************************************** -#define GPIO_GPBAMSEL_GPIO42 0x400 // Analog Mode select for this pin -#define GPIO_GPBAMSEL_GPIO43 0x800 // Analog Mode select for this pin -#define GPIO_GPBAMSEL_GPIO46 0x4000 // Analog Mode select for this pin -#define GPIO_GPBAMSEL_GPIO47 0x8000 // Analog Mode select for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBGMUX1 register -// -//***************************************************************************** -#define GPIO_GPBGMUX1_GPIO32_S 0 -#define GPIO_GPBGMUX1_GPIO32_M 0x3 // Defines pin-muxing selection - // for GPIO32 -#define GPIO_GPBGMUX1_GPIO33_S 2 -#define GPIO_GPBGMUX1_GPIO33_M 0xC // Defines pin-muxing selection - // for GPIO33 -#define GPIO_GPBGMUX1_GPIO34_S 4 -#define GPIO_GPBGMUX1_GPIO34_M 0x30 // Defines pin-muxing selection - // for GPIO34 -#define GPIO_GPBGMUX1_GPIO35_S 6 -#define GPIO_GPBGMUX1_GPIO35_M 0xC0 // Defines pin-muxing selection - // for GPIO35 -#define GPIO_GPBGMUX1_GPIO36_S 8 -#define GPIO_GPBGMUX1_GPIO36_M 0x300 // Defines pin-muxing selection - // for GPIO36 -#define GPIO_GPBGMUX1_GPIO37_S 10 -#define GPIO_GPBGMUX1_GPIO37_M 0xC00 // Defines pin-muxing selection - // for GPIO37 -#define GPIO_GPBGMUX1_GPIO38_S 12 -#define GPIO_GPBGMUX1_GPIO38_M 0x3000 // Defines pin-muxing selection - // for GPIO38 -#define GPIO_GPBGMUX1_GPIO39_S 14 -#define GPIO_GPBGMUX1_GPIO39_M 0xC000 // Defines pin-muxing selection - // for GPIO39 -#define GPIO_GPBGMUX1_GPIO40_S 16 -#define GPIO_GPBGMUX1_GPIO40_M 0x30000 // Defines pin-muxing selection - // for GPIO40 -#define GPIO_GPBGMUX1_GPIO41_S 18 -#define GPIO_GPBGMUX1_GPIO41_M 0xC0000 // Defines pin-muxing selection - // for GPIO41 -#define GPIO_GPBGMUX1_GPIO42_S 20 -#define GPIO_GPBGMUX1_GPIO42_M 0x300000 // Defines pin-muxing selection - // for GPIO42 -#define GPIO_GPBGMUX1_GPIO43_S 22 -#define GPIO_GPBGMUX1_GPIO43_M 0xC00000 // Defines pin-muxing selection - // for GPIO43 -#define GPIO_GPBGMUX1_GPIO44_S 24 -#define GPIO_GPBGMUX1_GPIO44_M 0x3000000 // Defines pin-muxing selection - // for GPIO44 -#define GPIO_GPBGMUX1_GPIO45_S 26 -#define GPIO_GPBGMUX1_GPIO45_M 0xC000000 // Defines pin-muxing selection - // for GPIO45 -#define GPIO_GPBGMUX1_GPIO46_S 28 -#define GPIO_GPBGMUX1_GPIO46_M 0x30000000 // Defines pin-muxing selection - // for GPIO46 -#define GPIO_GPBGMUX1_GPIO47_S 30 -#define GPIO_GPBGMUX1_GPIO47_M 0xC0000000 // Defines pin-muxing selection - // for GPIO47 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBGMUX2 register -// -//***************************************************************************** -#define GPIO_GPBGMUX2_GPIO48_S 0 -#define GPIO_GPBGMUX2_GPIO48_M 0x3 // Defines pin-muxing selection - // for GPIO48 -#define GPIO_GPBGMUX2_GPIO49_S 2 -#define GPIO_GPBGMUX2_GPIO49_M 0xC // Defines pin-muxing selection - // for GPIO49 -#define GPIO_GPBGMUX2_GPIO50_S 4 -#define GPIO_GPBGMUX2_GPIO50_M 0x30 // Defines pin-muxing selection - // for GPIO50 -#define GPIO_GPBGMUX2_GPIO51_S 6 -#define GPIO_GPBGMUX2_GPIO51_M 0xC0 // Defines pin-muxing selection - // for GPIO51 -#define GPIO_GPBGMUX2_GPIO52_S 8 -#define GPIO_GPBGMUX2_GPIO52_M 0x300 // Defines pin-muxing selection - // for GPIO52 -#define GPIO_GPBGMUX2_GPIO53_S 10 -#define GPIO_GPBGMUX2_GPIO53_M 0xC00 // Defines pin-muxing selection - // for GPIO53 -#define GPIO_GPBGMUX2_GPIO54_S 12 -#define GPIO_GPBGMUX2_GPIO54_M 0x3000 // Defines pin-muxing selection - // for GPIO54 -#define GPIO_GPBGMUX2_GPIO55_S 14 -#define GPIO_GPBGMUX2_GPIO55_M 0xC000 // Defines pin-muxing selection - // for GPIO55 -#define GPIO_GPBGMUX2_GPIO56_S 16 -#define GPIO_GPBGMUX2_GPIO56_M 0x30000 // Defines pin-muxing selection - // for GPIO56 -#define GPIO_GPBGMUX2_GPIO57_S 18 -#define GPIO_GPBGMUX2_GPIO57_M 0xC0000 // Defines pin-muxing selection - // for GPIO57 -#define GPIO_GPBGMUX2_GPIO58_S 20 -#define GPIO_GPBGMUX2_GPIO58_M 0x300000 // Defines pin-muxing selection - // for GPIO58 -#define GPIO_GPBGMUX2_GPIO59_S 22 -#define GPIO_GPBGMUX2_GPIO59_M 0xC00000 // Defines pin-muxing selection - // for GPIO59 -#define GPIO_GPBGMUX2_GPIO60_S 24 -#define GPIO_GPBGMUX2_GPIO60_M 0x3000000 // Defines pin-muxing selection - // for GPIO60 -#define GPIO_GPBGMUX2_GPIO61_S 26 -#define GPIO_GPBGMUX2_GPIO61_M 0xC000000 // Defines pin-muxing selection - // for GPIO61 -#define GPIO_GPBGMUX2_GPIO62_S 28 -#define GPIO_GPBGMUX2_GPIO62_M 0x30000000 // Defines pin-muxing selection - // for GPIO62 -#define GPIO_GPBGMUX2_GPIO63_S 30 -#define GPIO_GPBGMUX2_GPIO63_M 0xC0000000 // Defines pin-muxing selection - // for GPIO63 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCSEL1 register -// -//***************************************************************************** -#define GPIO_GPBCSEL1_GPIO32_S 0 -#define GPIO_GPBCSEL1_GPIO32_M 0xF // GPIO32 Master CPU Select -#define GPIO_GPBCSEL1_GPIO33_S 4 -#define GPIO_GPBCSEL1_GPIO33_M 0xF0 // GPIO33 Master CPU Select -#define GPIO_GPBCSEL1_GPIO34_S 8 -#define GPIO_GPBCSEL1_GPIO34_M 0xF00 // GPIO34 Master CPU Select -#define GPIO_GPBCSEL1_GPIO35_S 12 -#define GPIO_GPBCSEL1_GPIO35_M 0xF000 // GPIO35 Master CPU Select -#define GPIO_GPBCSEL1_GPIO36_S 16 -#define GPIO_GPBCSEL1_GPIO36_M 0xF0000 // GPIO36 Master CPU Select -#define GPIO_GPBCSEL1_GPIO37_S 20 -#define GPIO_GPBCSEL1_GPIO37_M 0xF00000 // GPIO37 Master CPU Select -#define GPIO_GPBCSEL1_GPIO38_S 24 -#define GPIO_GPBCSEL1_GPIO38_M 0xF000000 // GPIO38 Master CPU Select -#define GPIO_GPBCSEL1_GPIO39_S 28 -#define GPIO_GPBCSEL1_GPIO39_M 0xF0000000 // GPIO39 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCSEL2 register -// -//***************************************************************************** -#define GPIO_GPBCSEL2_GPIO40_S 0 -#define GPIO_GPBCSEL2_GPIO40_M 0xF // GPIO40 Master CPU Select -#define GPIO_GPBCSEL2_GPIO41_S 4 -#define GPIO_GPBCSEL2_GPIO41_M 0xF0 // GPIO41 Master CPU Select -#define GPIO_GPBCSEL2_GPIO42_S 8 -#define GPIO_GPBCSEL2_GPIO42_M 0xF00 // GPIO42 Master CPU Select -#define GPIO_GPBCSEL2_GPIO43_S 12 -#define GPIO_GPBCSEL2_GPIO43_M 0xF000 // GPIO43 Master CPU Select -#define GPIO_GPBCSEL2_GPIO44_S 16 -#define GPIO_GPBCSEL2_GPIO44_M 0xF0000 // GPIO44 Master CPU Select -#define GPIO_GPBCSEL2_GPIO45_S 20 -#define GPIO_GPBCSEL2_GPIO45_M 0xF00000 // GPIO45 Master CPU Select -#define GPIO_GPBCSEL2_GPIO46_S 24 -#define GPIO_GPBCSEL2_GPIO46_M 0xF000000 // GPIO46 Master CPU Select -#define GPIO_GPBCSEL2_GPIO47_S 28 -#define GPIO_GPBCSEL2_GPIO47_M 0xF0000000 // GPIO47 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCSEL3 register -// -//***************************************************************************** -#define GPIO_GPBCSEL3_GPIO48_S 0 -#define GPIO_GPBCSEL3_GPIO48_M 0xF // GPIO48 Master CPU Select -#define GPIO_GPBCSEL3_GPIO49_S 4 -#define GPIO_GPBCSEL3_GPIO49_M 0xF0 // GPIO49 Master CPU Select -#define GPIO_GPBCSEL3_GPIO50_S 8 -#define GPIO_GPBCSEL3_GPIO50_M 0xF00 // GPIO50 Master CPU Select -#define GPIO_GPBCSEL3_GPIO51_S 12 -#define GPIO_GPBCSEL3_GPIO51_M 0xF000 // GPIO51 Master CPU Select -#define GPIO_GPBCSEL3_GPIO52_S 16 -#define GPIO_GPBCSEL3_GPIO52_M 0xF0000 // GPIO52 Master CPU Select -#define GPIO_GPBCSEL3_GPIO53_S 20 -#define GPIO_GPBCSEL3_GPIO53_M 0xF00000 // GPIO53 Master CPU Select -#define GPIO_GPBCSEL3_GPIO54_S 24 -#define GPIO_GPBCSEL3_GPIO54_M 0xF000000 // GPIO54 Master CPU Select -#define GPIO_GPBCSEL3_GPIO55_S 28 -#define GPIO_GPBCSEL3_GPIO55_M 0xF0000000 // GPIO55 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCSEL4 register -// -//***************************************************************************** -#define GPIO_GPBCSEL4_GPIO56_S 0 -#define GPIO_GPBCSEL4_GPIO56_M 0xF // GPIO56 Master CPU Select -#define GPIO_GPBCSEL4_GPIO57_S 4 -#define GPIO_GPBCSEL4_GPIO57_M 0xF0 // GPIO57 Master CPU Select -#define GPIO_GPBCSEL4_GPIO58_S 8 -#define GPIO_GPBCSEL4_GPIO58_M 0xF00 // GPIO58 Master CPU Select -#define GPIO_GPBCSEL4_GPIO59_S 12 -#define GPIO_GPBCSEL4_GPIO59_M 0xF000 // GPIO59 Master CPU Select -#define GPIO_GPBCSEL4_GPIO60_S 16 -#define GPIO_GPBCSEL4_GPIO60_M 0xF0000 // GPIO60 Master CPU Select -#define GPIO_GPBCSEL4_GPIO61_S 20 -#define GPIO_GPBCSEL4_GPIO61_M 0xF00000 // GPIO61 Master CPU Select -#define GPIO_GPBCSEL4_GPIO62_S 24 -#define GPIO_GPBCSEL4_GPIO62_M 0xF000000 // GPIO62 Master CPU Select -#define GPIO_GPBCSEL4_GPIO63_S 28 -#define GPIO_GPBCSEL4_GPIO63_M 0xF0000000 // GPIO63 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBLOCK register -// -//***************************************************************************** -#define GPIO_GPBLOCK_GPIO32 0x1 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO33 0x2 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO34 0x4 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO35 0x8 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO36 0x10 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO37 0x20 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO38 0x40 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO39 0x80 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO40 0x100 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO41 0x200 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO42 0x400 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO43 0x800 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO44 0x1000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO45 0x2000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO46 0x4000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO47 0x8000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO48 0x10000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO49 0x20000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO50 0x40000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO51 0x80000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO52 0x100000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO53 0x200000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO54 0x400000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO55 0x800000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO56 0x1000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO57 0x2000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO58 0x4000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO59 0x8000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO60 0x10000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO61 0x20000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO62 0x40000000 // Configuration Lock bit for this - // pin -#define GPIO_GPBLOCK_GPIO63 0x80000000 // Configuration Lock bit for this - // pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCR register -// -//***************************************************************************** -#define GPIO_GPBCR_GPIO32 0x1 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO33 0x2 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO34 0x4 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO35 0x8 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO36 0x10 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO37 0x20 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO38 0x40 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO39 0x80 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO40 0x100 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO41 0x200 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO42 0x400 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO43 0x800 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO44 0x1000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO45 0x2000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO46 0x4000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO47 0x8000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO48 0x10000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO49 0x20000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO50 0x40000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO51 0x80000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO52 0x100000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO53 0x200000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO54 0x400000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO55 0x800000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO56 0x1000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO57 0x2000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO58 0x4000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO59 0x8000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO60 0x10000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO61 0x20000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO62 0x40000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPBCR_GPIO63 0x80000000 // Configuration lock commit bit - // for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCTRL register -// -//***************************************************************************** -#define GPIO_GPCCTRL_QUALPRD0_S 0 -#define GPIO_GPCCTRL_QUALPRD0_M 0xFF // Qualification sampling period - // for GPIO64 to GPIO71 -#define GPIO_GPCCTRL_QUALPRD1_S 8 -#define GPIO_GPCCTRL_QUALPRD1_M 0xFF00 // Qualification sampling period - // for GPIO72 to GPIO79 -#define GPIO_GPCCTRL_QUALPRD2_S 16 -#define GPIO_GPCCTRL_QUALPRD2_M 0xFF0000 // Qualification sampling period - // for GPIO80 to GPIO87 -#define GPIO_GPCCTRL_QUALPRD3_S 24 -#define GPIO_GPCCTRL_QUALPRD3_M 0xFF000000 // Qualification sampling period - // for GPIO88 to GPIO95 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCQSEL1 register -// -//***************************************************************************** -#define GPIO_GPCQSEL1_GPIO64_S 0 -#define GPIO_GPCQSEL1_GPIO64_M 0x3 // Select input qualification type - // for GPIO64 -#define GPIO_GPCQSEL1_GPIO65_S 2 -#define GPIO_GPCQSEL1_GPIO65_M 0xC // Select input qualification type - // for GPIO65 -#define GPIO_GPCQSEL1_GPIO66_S 4 -#define GPIO_GPCQSEL1_GPIO66_M 0x30 // Select input qualification type - // for GPIO66 -#define GPIO_GPCQSEL1_GPIO67_S 6 -#define GPIO_GPCQSEL1_GPIO67_M 0xC0 // Select input qualification type - // for GPIO67 -#define GPIO_GPCQSEL1_GPIO68_S 8 -#define GPIO_GPCQSEL1_GPIO68_M 0x300 // Select input qualification type - // for GPIO68 -#define GPIO_GPCQSEL1_GPIO69_S 10 -#define GPIO_GPCQSEL1_GPIO69_M 0xC00 // Select input qualification type - // for GPIO69 -#define GPIO_GPCQSEL1_GPIO70_S 12 -#define GPIO_GPCQSEL1_GPIO70_M 0x3000 // Select input qualification type - // for GPIO70 -#define GPIO_GPCQSEL1_GPIO71_S 14 -#define GPIO_GPCQSEL1_GPIO71_M 0xC000 // Select input qualification type - // for GPIO71 -#define GPIO_GPCQSEL1_GPIO72_S 16 -#define GPIO_GPCQSEL1_GPIO72_M 0x30000 // Select input qualification type - // for GPIO72 -#define GPIO_GPCQSEL1_GPIO73_S 18 -#define GPIO_GPCQSEL1_GPIO73_M 0xC0000 // Select input qualification type - // for GPIO73 -#define GPIO_GPCQSEL1_GPIO74_S 20 -#define GPIO_GPCQSEL1_GPIO74_M 0x300000 // Select input qualification type - // for GPIO74 -#define GPIO_GPCQSEL1_GPIO75_S 22 -#define GPIO_GPCQSEL1_GPIO75_M 0xC00000 // Select input qualification type - // for GPIO75 -#define GPIO_GPCQSEL1_GPIO76_S 24 -#define GPIO_GPCQSEL1_GPIO76_M 0x3000000 // Select input qualification type - // for GPIO76 -#define GPIO_GPCQSEL1_GPIO77_S 26 -#define GPIO_GPCQSEL1_GPIO77_M 0xC000000 // Select input qualification type - // for GPIO77 -#define GPIO_GPCQSEL1_GPIO78_S 28 -#define GPIO_GPCQSEL1_GPIO78_M 0x30000000 // Select input qualification type - // for GPIO78 -#define GPIO_GPCQSEL1_GPIO79_S 30 -#define GPIO_GPCQSEL1_GPIO79_M 0xC0000000 // Select input qualification type - // for GPIO79 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCQSEL2 register -// -//***************************************************************************** -#define GPIO_GPCQSEL2_GPIO80_S 0 -#define GPIO_GPCQSEL2_GPIO80_M 0x3 // Select input qualification type - // for GPIO80 -#define GPIO_GPCQSEL2_GPIO81_S 2 -#define GPIO_GPCQSEL2_GPIO81_M 0xC // Select input qualification type - // for GPIO81 -#define GPIO_GPCQSEL2_GPIO82_S 4 -#define GPIO_GPCQSEL2_GPIO82_M 0x30 // Select input qualification type - // for GPIO82 -#define GPIO_GPCQSEL2_GPIO83_S 6 -#define GPIO_GPCQSEL2_GPIO83_M 0xC0 // Select input qualification type - // for GPIO83 -#define GPIO_GPCQSEL2_GPIO84_S 8 -#define GPIO_GPCQSEL2_GPIO84_M 0x300 // Select input qualification type - // for GPIO84 -#define GPIO_GPCQSEL2_GPIO85_S 10 -#define GPIO_GPCQSEL2_GPIO85_M 0xC00 // Select input qualification type - // for GPIO85 -#define GPIO_GPCQSEL2_GPIO86_S 12 -#define GPIO_GPCQSEL2_GPIO86_M 0x3000 // Select input qualification type - // for GPIO86 -#define GPIO_GPCQSEL2_GPIO87_S 14 -#define GPIO_GPCQSEL2_GPIO87_M 0xC000 // Select input qualification type - // for GPIO87 -#define GPIO_GPCQSEL2_GPIO88_S 16 -#define GPIO_GPCQSEL2_GPIO88_M 0x30000 // Select input qualification type - // for GPIO88 -#define GPIO_GPCQSEL2_GPIO89_S 18 -#define GPIO_GPCQSEL2_GPIO89_M 0xC0000 // Select input qualification type - // for GPIO89 -#define GPIO_GPCQSEL2_GPIO90_S 20 -#define GPIO_GPCQSEL2_GPIO90_M 0x300000 // Select input qualification type - // for GPIO90 -#define GPIO_GPCQSEL2_GPIO91_S 22 -#define GPIO_GPCQSEL2_GPIO91_M 0xC00000 // Select input qualification type - // for GPIO91 -#define GPIO_GPCQSEL2_GPIO92_S 24 -#define GPIO_GPCQSEL2_GPIO92_M 0x3000000 // Select input qualification type - // for GPIO92 -#define GPIO_GPCQSEL2_GPIO93_S 26 -#define GPIO_GPCQSEL2_GPIO93_M 0xC000000 // Select input qualification type - // for GPIO93 -#define GPIO_GPCQSEL2_GPIO94_S 28 -#define GPIO_GPCQSEL2_GPIO94_M 0x30000000 // Select input qualification type - // for GPIO94 -#define GPIO_GPCQSEL2_GPIO95_S 30 -#define GPIO_GPCQSEL2_GPIO95_M 0xC0000000 // Select input qualification type - // for GPIO95 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCMUX1 register -// -//***************************************************************************** -#define GPIO_GPCMUX1_GPIO64_S 0 -#define GPIO_GPCMUX1_GPIO64_M 0x3 // Defines pin-muxing selection - // for GPIO64 -#define GPIO_GPCMUX1_GPIO65_S 2 -#define GPIO_GPCMUX1_GPIO65_M 0xC // Defines pin-muxing selection - // for GPIO65 -#define GPIO_GPCMUX1_GPIO66_S 4 -#define GPIO_GPCMUX1_GPIO66_M 0x30 // Defines pin-muxing selection - // for GPIO66 -#define GPIO_GPCMUX1_GPIO67_S 6 -#define GPIO_GPCMUX1_GPIO67_M 0xC0 // Defines pin-muxing selection - // for GPIO67 -#define GPIO_GPCMUX1_GPIO68_S 8 -#define GPIO_GPCMUX1_GPIO68_M 0x300 // Defines pin-muxing selection - // for GPIO68 -#define GPIO_GPCMUX1_GPIO69_S 10 -#define GPIO_GPCMUX1_GPIO69_M 0xC00 // Defines pin-muxing selection - // for GPIO69 -#define GPIO_GPCMUX1_GPIO70_S 12 -#define GPIO_GPCMUX1_GPIO70_M 0x3000 // Defines pin-muxing selection - // for GPIO70 -#define GPIO_GPCMUX1_GPIO71_S 14 -#define GPIO_GPCMUX1_GPIO71_M 0xC000 // Defines pin-muxing selection - // for GPIO71 -#define GPIO_GPCMUX1_GPIO72_S 16 -#define GPIO_GPCMUX1_GPIO72_M 0x30000 // Defines pin-muxing selection - // for GPIO72 -#define GPIO_GPCMUX1_GPIO73_S 18 -#define GPIO_GPCMUX1_GPIO73_M 0xC0000 // Defines pin-muxing selection - // for GPIO73 -#define GPIO_GPCMUX1_GPIO74_S 20 -#define GPIO_GPCMUX1_GPIO74_M 0x300000 // Defines pin-muxing selection - // for GPIO74 -#define GPIO_GPCMUX1_GPIO75_S 22 -#define GPIO_GPCMUX1_GPIO75_M 0xC00000 // Defines pin-muxing selection - // for GPIO75 -#define GPIO_GPCMUX1_GPIO76_S 24 -#define GPIO_GPCMUX1_GPIO76_M 0x3000000 // Defines pin-muxing selection - // for GPIO76 -#define GPIO_GPCMUX1_GPIO77_S 26 -#define GPIO_GPCMUX1_GPIO77_M 0xC000000 // Defines pin-muxing selection - // for GPIO77 -#define GPIO_GPCMUX1_GPIO78_S 28 -#define GPIO_GPCMUX1_GPIO78_M 0x30000000 // Defines pin-muxing selection - // for GPIO78 -#define GPIO_GPCMUX1_GPIO79_S 30 -#define GPIO_GPCMUX1_GPIO79_M 0xC0000000 // Defines pin-muxing selection - // for GPIO79 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCMUX2 register -// -//***************************************************************************** -#define GPIO_GPCMUX2_GPIO80_S 0 -#define GPIO_GPCMUX2_GPIO80_M 0x3 // Defines pin-muxing selection - // for GPIO80 -#define GPIO_GPCMUX2_GPIO81_S 2 -#define GPIO_GPCMUX2_GPIO81_M 0xC // Defines pin-muxing selection - // for GPIO81 -#define GPIO_GPCMUX2_GPIO82_S 4 -#define GPIO_GPCMUX2_GPIO82_M 0x30 // Defines pin-muxing selection - // for GPIO82 -#define GPIO_GPCMUX2_GPIO83_S 6 -#define GPIO_GPCMUX2_GPIO83_M 0xC0 // Defines pin-muxing selection - // for GPIO83 -#define GPIO_GPCMUX2_GPIO84_S 8 -#define GPIO_GPCMUX2_GPIO84_M 0x300 // Defines pin-muxing selection - // for GPIO84 -#define GPIO_GPCMUX2_GPIO85_S 10 -#define GPIO_GPCMUX2_GPIO85_M 0xC00 // Defines pin-muxing selection - // for GPIO85 -#define GPIO_GPCMUX2_GPIO86_S 12 -#define GPIO_GPCMUX2_GPIO86_M 0x3000 // Defines pin-muxing selection - // for GPIO86 -#define GPIO_GPCMUX2_GPIO87_S 14 -#define GPIO_GPCMUX2_GPIO87_M 0xC000 // Defines pin-muxing selection - // for GPIO87 -#define GPIO_GPCMUX2_GPIO88_S 16 -#define GPIO_GPCMUX2_GPIO88_M 0x30000 // Defines pin-muxing selection - // for GPIO88 -#define GPIO_GPCMUX2_GPIO89_S 18 -#define GPIO_GPCMUX2_GPIO89_M 0xC0000 // Defines pin-muxing selection - // for GPIO89 -#define GPIO_GPCMUX2_GPIO90_S 20 -#define GPIO_GPCMUX2_GPIO90_M 0x300000 // Defines pin-muxing selection - // for GPIO90 -#define GPIO_GPCMUX2_GPIO91_S 22 -#define GPIO_GPCMUX2_GPIO91_M 0xC00000 // Defines pin-muxing selection - // for GPIO91 -#define GPIO_GPCMUX2_GPIO92_S 24 -#define GPIO_GPCMUX2_GPIO92_M 0x3000000 // Defines pin-muxing selection - // for GPIO92 -#define GPIO_GPCMUX2_GPIO93_S 26 -#define GPIO_GPCMUX2_GPIO93_M 0xC000000 // Defines pin-muxing selection - // for GPIO93 -#define GPIO_GPCMUX2_GPIO94_S 28 -#define GPIO_GPCMUX2_GPIO94_M 0x30000000 // Defines pin-muxing selection - // for GPIO94 -#define GPIO_GPCMUX2_GPIO95_S 30 -#define GPIO_GPCMUX2_GPIO95_M 0xC0000000 // Defines pin-muxing selection - // for GPIO95 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCDIR register -// -//***************************************************************************** -#define GPIO_GPCDIR_GPIO64 0x1 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO65 0x2 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO66 0x4 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO67 0x8 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO68 0x10 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO69 0x20 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO70 0x40 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO71 0x80 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO72 0x100 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO73 0x200 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO74 0x400 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO75 0x800 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO76 0x1000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO77 0x2000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO78 0x4000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO79 0x8000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO80 0x10000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO81 0x20000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO82 0x40000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO83 0x80000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO84 0x100000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO85 0x200000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO86 0x400000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO87 0x800000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO88 0x1000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO89 0x2000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO90 0x4000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO91 0x8000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO92 0x10000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO93 0x20000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO94 0x40000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPCDIR_GPIO95 0x80000000 // Defines direction for this pin - // in GPIO mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCPUD register -// -//***************************************************************************** -#define GPIO_GPCPUD_GPIO64 0x1 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO65 0x2 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO66 0x4 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO67 0x8 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO68 0x10 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO69 0x20 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO70 0x40 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO71 0x80 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO72 0x100 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO73 0x200 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO74 0x400 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO75 0x800 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO76 0x1000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO77 0x2000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO78 0x4000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO79 0x8000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO80 0x10000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO81 0x20000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO82 0x40000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO83 0x80000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO84 0x100000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO85 0x200000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO86 0x400000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO87 0x800000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO88 0x1000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO89 0x2000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO90 0x4000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO91 0x8000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO92 0x10000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO93 0x20000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO94 0x40000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPCPUD_GPIO95 0x80000000 // Pull-Up Disable control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCINV register -// -//***************************************************************************** -#define GPIO_GPCINV_GPIO64 0x1 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO65 0x2 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO66 0x4 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO67 0x8 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO68 0x10 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO69 0x20 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO70 0x40 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO71 0x80 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO72 0x100 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO73 0x200 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO74 0x400 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO75 0x800 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO76 0x1000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO77 0x2000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO78 0x4000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO79 0x8000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO80 0x10000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO81 0x20000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO82 0x40000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO83 0x80000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO84 0x100000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO85 0x200000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO86 0x400000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO87 0x800000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO88 0x1000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO89 0x2000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO90 0x4000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO91 0x8000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO92 0x10000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO93 0x20000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO94 0x40000000 // Input inversion control for - // this pin -#define GPIO_GPCINV_GPIO95 0x80000000 // Input inversion control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCODR register -// -//***************************************************************************** -#define GPIO_GPCODR_GPIO64 0x1 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO65 0x2 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO66 0x4 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO67 0x8 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO68 0x10 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO69 0x20 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO70 0x40 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO71 0x80 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO72 0x100 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO73 0x200 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO74 0x400 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO75 0x800 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO76 0x1000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO77 0x2000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO78 0x4000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO79 0x8000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO80 0x10000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO81 0x20000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO82 0x40000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO83 0x80000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO84 0x100000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO85 0x200000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO86 0x400000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO87 0x800000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO88 0x1000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO89 0x2000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO90 0x4000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO91 0x8000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO92 0x10000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO93 0x20000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO94 0x40000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPCODR_GPIO95 0x80000000 // Outpout Open-Drain control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCGMUX1 register -// -//***************************************************************************** -#define GPIO_GPCGMUX1_GPIO64_S 0 -#define GPIO_GPCGMUX1_GPIO64_M 0x3 // Defines pin-muxing selection - // for GPIO64 -#define GPIO_GPCGMUX1_GPIO65_S 2 -#define GPIO_GPCGMUX1_GPIO65_M 0xC // Defines pin-muxing selection - // for GPIO65 -#define GPIO_GPCGMUX1_GPIO66_S 4 -#define GPIO_GPCGMUX1_GPIO66_M 0x30 // Defines pin-muxing selection - // for GPIO66 -#define GPIO_GPCGMUX1_GPIO67_S 6 -#define GPIO_GPCGMUX1_GPIO67_M 0xC0 // Defines pin-muxing selection - // for GPIO67 -#define GPIO_GPCGMUX1_GPIO68_S 8 -#define GPIO_GPCGMUX1_GPIO68_M 0x300 // Defines pin-muxing selection - // for GPIO68 -#define GPIO_GPCGMUX1_GPIO69_S 10 -#define GPIO_GPCGMUX1_GPIO69_M 0xC00 // Defines pin-muxing selection - // for GPIO69 -#define GPIO_GPCGMUX1_GPIO70_S 12 -#define GPIO_GPCGMUX1_GPIO70_M 0x3000 // Defines pin-muxing selection - // for GPIO70 -#define GPIO_GPCGMUX1_GPIO71_S 14 -#define GPIO_GPCGMUX1_GPIO71_M 0xC000 // Defines pin-muxing selection - // for GPIO71 -#define GPIO_GPCGMUX1_GPIO72_S 16 -#define GPIO_GPCGMUX1_GPIO72_M 0x30000 // Defines pin-muxing selection - // for GPIO72 -#define GPIO_GPCGMUX1_GPIO73_S 18 -#define GPIO_GPCGMUX1_GPIO73_M 0xC0000 // Defines pin-muxing selection - // for GPIO73 -#define GPIO_GPCGMUX1_GPIO74_S 20 -#define GPIO_GPCGMUX1_GPIO74_M 0x300000 // Defines pin-muxing selection - // for GPIO74 -#define GPIO_GPCGMUX1_GPIO75_S 22 -#define GPIO_GPCGMUX1_GPIO75_M 0xC00000 // Defines pin-muxing selection - // for GPIO75 -#define GPIO_GPCGMUX1_GPIO76_S 24 -#define GPIO_GPCGMUX1_GPIO76_M 0x3000000 // Defines pin-muxing selection - // for GPIO76 -#define GPIO_GPCGMUX1_GPIO77_S 26 -#define GPIO_GPCGMUX1_GPIO77_M 0xC000000 // Defines pin-muxing selection - // for GPIO77 -#define GPIO_GPCGMUX1_GPIO78_S 28 -#define GPIO_GPCGMUX1_GPIO78_M 0x30000000 // Defines pin-muxing selection - // for GPIO78 -#define GPIO_GPCGMUX1_GPIO79_S 30 -#define GPIO_GPCGMUX1_GPIO79_M 0xC0000000 // Defines pin-muxing selection - // for GPIO79 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCGMUX2 register -// -//***************************************************************************** -#define GPIO_GPCGMUX2_GPIO80_S 0 -#define GPIO_GPCGMUX2_GPIO80_M 0x3 // Defines pin-muxing selection - // for GPIO80 -#define GPIO_GPCGMUX2_GPIO81_S 2 -#define GPIO_GPCGMUX2_GPIO81_M 0xC // Defines pin-muxing selection - // for GPIO81 -#define GPIO_GPCGMUX2_GPIO82_S 4 -#define GPIO_GPCGMUX2_GPIO82_M 0x30 // Defines pin-muxing selection - // for GPIO82 -#define GPIO_GPCGMUX2_GPIO83_S 6 -#define GPIO_GPCGMUX2_GPIO83_M 0xC0 // Defines pin-muxing selection - // for GPIO83 -#define GPIO_GPCGMUX2_GPIO84_S 8 -#define GPIO_GPCGMUX2_GPIO84_M 0x300 // Defines pin-muxing selection - // for GPIO84 -#define GPIO_GPCGMUX2_GPIO85_S 10 -#define GPIO_GPCGMUX2_GPIO85_M 0xC00 // Defines pin-muxing selection - // for GPIO85 -#define GPIO_GPCGMUX2_GPIO86_S 12 -#define GPIO_GPCGMUX2_GPIO86_M 0x3000 // Defines pin-muxing selection - // for GPIO86 -#define GPIO_GPCGMUX2_GPIO87_S 14 -#define GPIO_GPCGMUX2_GPIO87_M 0xC000 // Defines pin-muxing selection - // for GPIO87 -#define GPIO_GPCGMUX2_GPIO88_S 16 -#define GPIO_GPCGMUX2_GPIO88_M 0x30000 // Defines pin-muxing selection - // for GPIO88 -#define GPIO_GPCGMUX2_GPIO89_S 18 -#define GPIO_GPCGMUX2_GPIO89_M 0xC0000 // Defines pin-muxing selection - // for GPIO89 -#define GPIO_GPCGMUX2_GPIO90_S 20 -#define GPIO_GPCGMUX2_GPIO90_M 0x300000 // Defines pin-muxing selection - // for GPIO90 -#define GPIO_GPCGMUX2_GPIO91_S 22 -#define GPIO_GPCGMUX2_GPIO91_M 0xC00000 // Defines pin-muxing selection - // for GPIO91 -#define GPIO_GPCGMUX2_GPIO92_S 24 -#define GPIO_GPCGMUX2_GPIO92_M 0x3000000 // Defines pin-muxing selection - // for GPIO92 -#define GPIO_GPCGMUX2_GPIO93_S 26 -#define GPIO_GPCGMUX2_GPIO93_M 0xC000000 // Defines pin-muxing selection - // for GPIO93 -#define GPIO_GPCGMUX2_GPIO94_S 28 -#define GPIO_GPCGMUX2_GPIO94_M 0x30000000 // Defines pin-muxing selection - // for GPIO94 -#define GPIO_GPCGMUX2_GPIO95_S 30 -#define GPIO_GPCGMUX2_GPIO95_M 0xC0000000 // Defines pin-muxing selection - // for GPIO95 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCSEL1 register -// -//***************************************************************************** -#define GPIO_GPCCSEL1_GPIO64_S 0 -#define GPIO_GPCCSEL1_GPIO64_M 0xF // GPIO64 Master CPU Select -#define GPIO_GPCCSEL1_GPIO65_S 4 -#define GPIO_GPCCSEL1_GPIO65_M 0xF0 // GPIO65 Master CPU Select -#define GPIO_GPCCSEL1_GPIO66_S 8 -#define GPIO_GPCCSEL1_GPIO66_M 0xF00 // GPIO66 Master CPU Select -#define GPIO_GPCCSEL1_GPIO67_S 12 -#define GPIO_GPCCSEL1_GPIO67_M 0xF000 // GPIO67 Master CPU Select -#define GPIO_GPCCSEL1_GPIO68_S 16 -#define GPIO_GPCCSEL1_GPIO68_M 0xF0000 // GPIO68 Master CPU Select -#define GPIO_GPCCSEL1_GPIO69_S 20 -#define GPIO_GPCCSEL1_GPIO69_M 0xF00000 // GPIO69 Master CPU Select -#define GPIO_GPCCSEL1_GPIO70_S 24 -#define GPIO_GPCCSEL1_GPIO70_M 0xF000000 // GPIO70 Master CPU Select -#define GPIO_GPCCSEL1_GPIO71_S 28 -#define GPIO_GPCCSEL1_GPIO71_M 0xF0000000 // GPIO71 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCSEL2 register -// -//***************************************************************************** -#define GPIO_GPCCSEL2_GPIO72_S 0 -#define GPIO_GPCCSEL2_GPIO72_M 0xF // GPIO72 Master CPU Select -#define GPIO_GPCCSEL2_GPIO73_S 4 -#define GPIO_GPCCSEL2_GPIO73_M 0xF0 // GPIO73 Master CPU Select -#define GPIO_GPCCSEL2_GPIO74_S 8 -#define GPIO_GPCCSEL2_GPIO74_M 0xF00 // GPIO74 Master CPU Select -#define GPIO_GPCCSEL2_GPIO75_S 12 -#define GPIO_GPCCSEL2_GPIO75_M 0xF000 // GPIO75 Master CPU Select -#define GPIO_GPCCSEL2_GPIO76_S 16 -#define GPIO_GPCCSEL2_GPIO76_M 0xF0000 // GPIO76 Master CPU Select -#define GPIO_GPCCSEL2_GPIO77_S 20 -#define GPIO_GPCCSEL2_GPIO77_M 0xF00000 // GPIO77 Master CPU Select -#define GPIO_GPCCSEL2_GPIO78_S 24 -#define GPIO_GPCCSEL2_GPIO78_M 0xF000000 // GPIO78 Master CPU Select -#define GPIO_GPCCSEL2_GPIO79_S 28 -#define GPIO_GPCCSEL2_GPIO79_M 0xF0000000 // GPIO79 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCSEL3 register -// -//***************************************************************************** -#define GPIO_GPCCSEL3_GPIO80_S 0 -#define GPIO_GPCCSEL3_GPIO80_M 0xF // GPIO80 Master CPU Select -#define GPIO_GPCCSEL3_GPIO81_S 4 -#define GPIO_GPCCSEL3_GPIO81_M 0xF0 // GPIO81 Master CPU Select -#define GPIO_GPCCSEL3_GPIO82_S 8 -#define GPIO_GPCCSEL3_GPIO82_M 0xF00 // GPIO82 Master CPU Select -#define GPIO_GPCCSEL3_GPIO83_S 12 -#define GPIO_GPCCSEL3_GPIO83_M 0xF000 // GPIO83 Master CPU Select -#define GPIO_GPCCSEL3_GPIO84_S 16 -#define GPIO_GPCCSEL3_GPIO84_M 0xF0000 // GPIO84 Master CPU Select -#define GPIO_GPCCSEL3_GPIO85_S 20 -#define GPIO_GPCCSEL3_GPIO85_M 0xF00000 // GPIO85 Master CPU Select -#define GPIO_GPCCSEL3_GPIO86_S 24 -#define GPIO_GPCCSEL3_GPIO86_M 0xF000000 // GPIO86 Master CPU Select -#define GPIO_GPCCSEL3_GPIO87_S 28 -#define GPIO_GPCCSEL3_GPIO87_M 0xF0000000 // GPIO87 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCSEL4 register -// -//***************************************************************************** -#define GPIO_GPCCSEL4_GPIO88_S 0 -#define GPIO_GPCCSEL4_GPIO88_M 0xF // GPIO88 Master CPU Select -#define GPIO_GPCCSEL4_GPIO89_S 4 -#define GPIO_GPCCSEL4_GPIO89_M 0xF0 // GPIO89 Master CPU Select -#define GPIO_GPCCSEL4_GPIO90_S 8 -#define GPIO_GPCCSEL4_GPIO90_M 0xF00 // GPIO90 Master CPU Select -#define GPIO_GPCCSEL4_GPIO91_S 12 -#define GPIO_GPCCSEL4_GPIO91_M 0xF000 // GPIO91 Master CPU Select -#define GPIO_GPCCSEL4_GPIO92_S 16 -#define GPIO_GPCCSEL4_GPIO92_M 0xF0000 // GPIO92 Master CPU Select -#define GPIO_GPCCSEL4_GPIO93_S 20 -#define GPIO_GPCCSEL4_GPIO93_M 0xF00000 // GPIO93 Master CPU Select -#define GPIO_GPCCSEL4_GPIO94_S 24 -#define GPIO_GPCCSEL4_GPIO94_M 0xF000000 // GPIO94 Master CPU Select -#define GPIO_GPCCSEL4_GPIO95_S 28 -#define GPIO_GPCCSEL4_GPIO95_M 0xF0000000 // GPIO95 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCLOCK register -// -//***************************************************************************** -#define GPIO_GPCLOCK_GPIO64 0x1 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO65 0x2 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO66 0x4 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO67 0x8 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO68 0x10 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO69 0x20 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO70 0x40 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO71 0x80 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO72 0x100 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO73 0x200 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO74 0x400 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO75 0x800 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO76 0x1000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO77 0x2000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO78 0x4000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO79 0x8000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO80 0x10000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO81 0x20000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO82 0x40000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO83 0x80000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO84 0x100000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO85 0x200000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO86 0x400000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO87 0x800000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO88 0x1000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO89 0x2000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO90 0x4000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO91 0x8000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO92 0x10000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO93 0x20000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO94 0x40000000 // Configuration Lock bit for this - // pin -#define GPIO_GPCLOCK_GPIO95 0x80000000 // Configuration Lock bit for this - // pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCR register -// -//***************************************************************************** -#define GPIO_GPCCR_GPIO64 0x1 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO65 0x2 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO66 0x4 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO67 0x8 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO68 0x10 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO69 0x20 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO70 0x40 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO71 0x80 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO72 0x100 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO73 0x200 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO74 0x400 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO75 0x800 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO76 0x1000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO77 0x2000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO78 0x4000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO79 0x8000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO80 0x10000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO81 0x20000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO82 0x40000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO83 0x80000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO84 0x100000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO85 0x200000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO86 0x400000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO87 0x800000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO88 0x1000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO89 0x2000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO90 0x4000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO91 0x8000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO92 0x10000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO93 0x20000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO94 0x40000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPCCR_GPIO95 0x80000000 // Configuration lock commit bit - // for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCTRL register -// -//***************************************************************************** -#define GPIO_GPDCTRL_QUALPRD0_S 0 -#define GPIO_GPDCTRL_QUALPRD0_M 0xFF // Qualification sampling period - // for GPIO96 to GPIO103 -#define GPIO_GPDCTRL_QUALPRD1_S 8 -#define GPIO_GPDCTRL_QUALPRD1_M 0xFF00 // Qualification sampling period - // for GPIO104 to GPIO111 -#define GPIO_GPDCTRL_QUALPRD2_S 16 -#define GPIO_GPDCTRL_QUALPRD2_M 0xFF0000 // Qualification sampling period - // for GPIO112 to GPIO119 -#define GPIO_GPDCTRL_QUALPRD3_S 24 -#define GPIO_GPDCTRL_QUALPRD3_M 0xFF000000 // Qualification sampling period - // for GPIO120 to GPIO127 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDQSEL1 register -// -//***************************************************************************** -#define GPIO_GPDQSEL1_GPIO96_S 0 -#define GPIO_GPDQSEL1_GPIO96_M 0x3 // Select input qualification type - // for GPIO96 -#define GPIO_GPDQSEL1_GPIO97_S 2 -#define GPIO_GPDQSEL1_GPIO97_M 0xC // Select input qualification type - // for GPIO97 -#define GPIO_GPDQSEL1_GPIO98_S 4 -#define GPIO_GPDQSEL1_GPIO98_M 0x30 // Select input qualification type - // for GPIO98 -#define GPIO_GPDQSEL1_GPIO99_S 6 -#define GPIO_GPDQSEL1_GPIO99_M 0xC0 // Select input qualification type - // for GPIO99 -#define GPIO_GPDQSEL1_GPIO100_S 8 -#define GPIO_GPDQSEL1_GPIO100_M 0x300 // Select input qualification type - // for GPIO100 -#define GPIO_GPDQSEL1_GPIO101_S 10 -#define GPIO_GPDQSEL1_GPIO101_M 0xC00 // Select input qualification type - // for GPIO101 -#define GPIO_GPDQSEL1_GPIO102_S 12 -#define GPIO_GPDQSEL1_GPIO102_M 0x3000 // Select input qualification type - // for GPIO102 -#define GPIO_GPDQSEL1_GPIO103_S 14 -#define GPIO_GPDQSEL1_GPIO103_M 0xC000 // Select input qualification type - // for GPIO103 -#define GPIO_GPDQSEL1_GPIO104_S 16 -#define GPIO_GPDQSEL1_GPIO104_M 0x30000 // Select input qualification type - // for GPIO104 -#define GPIO_GPDQSEL1_GPIO105_S 18 -#define GPIO_GPDQSEL1_GPIO105_M 0xC0000 // Select input qualification type - // for GPIO105 -#define GPIO_GPDQSEL1_GPIO106_S 20 -#define GPIO_GPDQSEL1_GPIO106_M 0x300000 // Select input qualification type - // for GPIO106 -#define GPIO_GPDQSEL1_GPIO107_S 22 -#define GPIO_GPDQSEL1_GPIO107_M 0xC00000 // Select input qualification type - // for GPIO107 -#define GPIO_GPDQSEL1_GPIO108_S 24 -#define GPIO_GPDQSEL1_GPIO108_M 0x3000000 // Select input qualification type - // for GPIO108 -#define GPIO_GPDQSEL1_GPIO109_S 26 -#define GPIO_GPDQSEL1_GPIO109_M 0xC000000 // Select input qualification type - // for GPIO109 -#define GPIO_GPDQSEL1_GPIO110_S 28 -#define GPIO_GPDQSEL1_GPIO110_M 0x30000000 // Select input qualification type - // for GPIO110 -#define GPIO_GPDQSEL1_GPIO111_S 30 -#define GPIO_GPDQSEL1_GPIO111_M 0xC0000000 // Select input qualification type - // for GPIO111 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDQSEL2 register -// -//***************************************************************************** -#define GPIO_GPDQSEL2_GPIO112_S 0 -#define GPIO_GPDQSEL2_GPIO112_M 0x3 // Select input qualification type - // for GPIO112 -#define GPIO_GPDQSEL2_GPIO113_S 2 -#define GPIO_GPDQSEL2_GPIO113_M 0xC // Select input qualification type - // for GPIO113 -#define GPIO_GPDQSEL2_GPIO114_S 4 -#define GPIO_GPDQSEL2_GPIO114_M 0x30 // Select input qualification type - // for GPIO114 -#define GPIO_GPDQSEL2_GPIO115_S 6 -#define GPIO_GPDQSEL2_GPIO115_M 0xC0 // Select input qualification type - // for GPIO115 -#define GPIO_GPDQSEL2_GPIO116_S 8 -#define GPIO_GPDQSEL2_GPIO116_M 0x300 // Select input qualification type - // for GPIO116 -#define GPIO_GPDQSEL2_GPIO117_S 10 -#define GPIO_GPDQSEL2_GPIO117_M 0xC00 // Select input qualification type - // for GPIO117 -#define GPIO_GPDQSEL2_GPIO118_S 12 -#define GPIO_GPDQSEL2_GPIO118_M 0x3000 // Select input qualification type - // for GPIO118 -#define GPIO_GPDQSEL2_GPIO119_S 14 -#define GPIO_GPDQSEL2_GPIO119_M 0xC000 // Select input qualification type - // for GPIO119 -#define GPIO_GPDQSEL2_GPIO120_S 16 -#define GPIO_GPDQSEL2_GPIO120_M 0x30000 // Select input qualification type - // for GPIO120 -#define GPIO_GPDQSEL2_GPIO121_S 18 -#define GPIO_GPDQSEL2_GPIO121_M 0xC0000 // Select input qualification type - // for GPIO121 -#define GPIO_GPDQSEL2_GPIO122_S 20 -#define GPIO_GPDQSEL2_GPIO122_M 0x300000 // Select input qualification type - // for GPIO122 -#define GPIO_GPDQSEL2_GPIO123_S 22 -#define GPIO_GPDQSEL2_GPIO123_M 0xC00000 // Select input qualification type - // for GPIO123 -#define GPIO_GPDQSEL2_GPIO124_S 24 -#define GPIO_GPDQSEL2_GPIO124_M 0x3000000 // Select input qualification type - // for GPIO124 -#define GPIO_GPDQSEL2_GPIO125_S 26 -#define GPIO_GPDQSEL2_GPIO125_M 0xC000000 // Select input qualification type - // for GPIO125 -#define GPIO_GPDQSEL2_GPIO126_S 28 -#define GPIO_GPDQSEL2_GPIO126_M 0x30000000 // Select input qualification type - // for GPIO126 -#define GPIO_GPDQSEL2_GPIO127_S 30 -#define GPIO_GPDQSEL2_GPIO127_M 0xC0000000 // Select input qualification type - // for GPIO127 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDMUX1 register -// -//***************************************************************************** -#define GPIO_GPDMUX1_GPIO96_S 0 -#define GPIO_GPDMUX1_GPIO96_M 0x3 // Defines pin-muxing selection - // for GPIO96 -#define GPIO_GPDMUX1_GPIO97_S 2 -#define GPIO_GPDMUX1_GPIO97_M 0xC // Defines pin-muxing selection - // for GPIO97 -#define GPIO_GPDMUX1_GPIO98_S 4 -#define GPIO_GPDMUX1_GPIO98_M 0x30 // Defines pin-muxing selection - // for GPIO98 -#define GPIO_GPDMUX1_GPIO99_S 6 -#define GPIO_GPDMUX1_GPIO99_M 0xC0 // Defines pin-muxing selection - // for GPIO99 -#define GPIO_GPDMUX1_GPIO100_S 8 -#define GPIO_GPDMUX1_GPIO100_M 0x300 // Defines pin-muxing selection - // for GPIO100 -#define GPIO_GPDMUX1_GPIO101_S 10 -#define GPIO_GPDMUX1_GPIO101_M 0xC00 // Defines pin-muxing selection - // for GPIO101 -#define GPIO_GPDMUX1_GPIO102_S 12 -#define GPIO_GPDMUX1_GPIO102_M 0x3000 // Defines pin-muxing selection - // for GPIO102 -#define GPIO_GPDMUX1_GPIO103_S 14 -#define GPIO_GPDMUX1_GPIO103_M 0xC000 // Defines pin-muxing selection - // for GPIO103 -#define GPIO_GPDMUX1_GPIO104_S 16 -#define GPIO_GPDMUX1_GPIO104_M 0x30000 // Defines pin-muxing selection - // for GPIO104 -#define GPIO_GPDMUX1_GPIO105_S 18 -#define GPIO_GPDMUX1_GPIO105_M 0xC0000 // Defines pin-muxing selection - // for GPIO105 -#define GPIO_GPDMUX1_GPIO106_S 20 -#define GPIO_GPDMUX1_GPIO106_M 0x300000 // Defines pin-muxing selection - // for GPIO106 -#define GPIO_GPDMUX1_GPIO107_S 22 -#define GPIO_GPDMUX1_GPIO107_M 0xC00000 // Defines pin-muxing selection - // for GPIO107 -#define GPIO_GPDMUX1_GPIO108_S 24 -#define GPIO_GPDMUX1_GPIO108_M 0x3000000 // Defines pin-muxing selection - // for GPIO108 -#define GPIO_GPDMUX1_GPIO109_S 26 -#define GPIO_GPDMUX1_GPIO109_M 0xC000000 // Defines pin-muxing selection - // for GPIO109 -#define GPIO_GPDMUX1_GPIO110_S 28 -#define GPIO_GPDMUX1_GPIO110_M 0x30000000 // Defines pin-muxing selection - // for GPIO110 -#define GPIO_GPDMUX1_GPIO111_S 30 -#define GPIO_GPDMUX1_GPIO111_M 0xC0000000 // Defines pin-muxing selection - // for GPIO111 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDMUX2 register -// -//***************************************************************************** -#define GPIO_GPDMUX2_GPIO112_S 0 -#define GPIO_GPDMUX2_GPIO112_M 0x3 // Defines pin-muxing selection - // for GPIO112 -#define GPIO_GPDMUX2_GPIO113_S 2 -#define GPIO_GPDMUX2_GPIO113_M 0xC // Defines pin-muxing selection - // for GPIO113 -#define GPIO_GPDMUX2_GPIO114_S 4 -#define GPIO_GPDMUX2_GPIO114_M 0x30 // Defines pin-muxing selection - // for GPIO114 -#define GPIO_GPDMUX2_GPIO115_S 6 -#define GPIO_GPDMUX2_GPIO115_M 0xC0 // Defines pin-muxing selection - // for GPIO115 -#define GPIO_GPDMUX2_GPIO116_S 8 -#define GPIO_GPDMUX2_GPIO116_M 0x300 // Defines pin-muxing selection - // for GPIO116 -#define GPIO_GPDMUX2_GPIO117_S 10 -#define GPIO_GPDMUX2_GPIO117_M 0xC00 // Defines pin-muxing selection - // for GPIO117 -#define GPIO_GPDMUX2_GPIO118_S 12 -#define GPIO_GPDMUX2_GPIO118_M 0x3000 // Defines pin-muxing selection - // for GPIO118 -#define GPIO_GPDMUX2_GPIO119_S 14 -#define GPIO_GPDMUX2_GPIO119_M 0xC000 // Defines pin-muxing selection - // for GPIO119 -#define GPIO_GPDMUX2_GPIO120_S 16 -#define GPIO_GPDMUX2_GPIO120_M 0x30000 // Defines pin-muxing selection - // for GPIO120 -#define GPIO_GPDMUX2_GPIO121_S 18 -#define GPIO_GPDMUX2_GPIO121_M 0xC0000 // Defines pin-muxing selection - // for GPIO121 -#define GPIO_GPDMUX2_GPIO122_S 20 -#define GPIO_GPDMUX2_GPIO122_M 0x300000 // Defines pin-muxing selection - // for GPIO122 -#define GPIO_GPDMUX2_GPIO123_S 22 -#define GPIO_GPDMUX2_GPIO123_M 0xC00000 // Defines pin-muxing selection - // for GPIO123 -#define GPIO_GPDMUX2_GPIO124_S 24 -#define GPIO_GPDMUX2_GPIO124_M 0x3000000 // Defines pin-muxing selection - // for GPIO124 -#define GPIO_GPDMUX2_GPIO125_S 26 -#define GPIO_GPDMUX2_GPIO125_M 0xC000000 // Defines pin-muxing selection - // for GPIO125 -#define GPIO_GPDMUX2_GPIO126_S 28 -#define GPIO_GPDMUX2_GPIO126_M 0x30000000 // Defines pin-muxing selection - // for GPIO126 -#define GPIO_GPDMUX2_GPIO127_S 30 -#define GPIO_GPDMUX2_GPIO127_M 0xC0000000 // Defines pin-muxing selection - // for GPIO127 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDDIR register -// -//***************************************************************************** -#define GPIO_GPDDIR_GPIO96 0x1 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO97 0x2 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO98 0x4 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO99 0x8 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO100 0x10 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO101 0x20 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO102 0x40 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO103 0x80 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO104 0x100 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO105 0x200 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO106 0x400 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO107 0x800 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO108 0x1000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO109 0x2000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO110 0x4000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO111 0x8000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO112 0x10000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO113 0x20000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO114 0x40000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO115 0x80000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO116 0x100000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO117 0x200000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO118 0x400000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO119 0x800000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO120 0x1000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO121 0x2000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO122 0x4000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO123 0x8000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO124 0x10000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO125 0x20000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO126 0x40000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPDDIR_GPIO127 0x80000000 // Defines direction for this pin - // in GPIO mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDPUD register -// -//***************************************************************************** -#define GPIO_GPDPUD_GPIO96 0x1 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO97 0x2 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO98 0x4 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO99 0x8 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO100 0x10 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO101 0x20 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO102 0x40 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO103 0x80 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO104 0x100 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO105 0x200 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO106 0x400 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO107 0x800 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO108 0x1000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO109 0x2000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO110 0x4000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO111 0x8000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO112 0x10000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO113 0x20000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO114 0x40000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO115 0x80000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO116 0x100000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO117 0x200000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO118 0x400000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO119 0x800000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO120 0x1000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO121 0x2000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO122 0x4000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO123 0x8000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO124 0x10000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO125 0x20000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO126 0x40000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPDPUD_GPIO127 0x80000000 // Pull-Up Disable control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDINV register -// -//***************************************************************************** -#define GPIO_GPDINV_GPIO96 0x1 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO97 0x2 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO98 0x4 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO99 0x8 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO100 0x10 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO101 0x20 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO102 0x40 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO103 0x80 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO104 0x100 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO105 0x200 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO106 0x400 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO107 0x800 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO108 0x1000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO109 0x2000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO110 0x4000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO111 0x8000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO112 0x10000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO113 0x20000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO114 0x40000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO115 0x80000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO116 0x100000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO117 0x200000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO118 0x400000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO119 0x800000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO120 0x1000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO121 0x2000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO122 0x4000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO123 0x8000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO124 0x10000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO125 0x20000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO126 0x40000000 // Input inversion control for - // this pin -#define GPIO_GPDINV_GPIO127 0x80000000 // Input inversion control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDODR register -// -//***************************************************************************** -#define GPIO_GPDODR_GPIO96 0x1 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO97 0x2 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO98 0x4 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO99 0x8 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO100 0x10 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO101 0x20 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO102 0x40 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO103 0x80 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO104 0x100 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO105 0x200 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO106 0x400 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO107 0x800 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO108 0x1000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO109 0x2000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO110 0x4000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO111 0x8000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO112 0x10000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO113 0x20000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO114 0x40000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO115 0x80000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO116 0x100000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO117 0x200000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO118 0x400000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO119 0x800000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO120 0x1000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO121 0x2000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO122 0x4000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO123 0x8000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO124 0x10000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO125 0x20000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO126 0x40000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPDODR_GPIO127 0x80000000 // Outpout Open-Drain control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDGMUX1 register -// -//***************************************************************************** -#define GPIO_GPDGMUX1_GPIO96_S 0 -#define GPIO_GPDGMUX1_GPIO96_M 0x3 // Defines pin-muxing selection - // for GPIO96 -#define GPIO_GPDGMUX1_GPIO97_S 2 -#define GPIO_GPDGMUX1_GPIO97_M 0xC // Defines pin-muxing selection - // for GPIO97 -#define GPIO_GPDGMUX1_GPIO98_S 4 -#define GPIO_GPDGMUX1_GPIO98_M 0x30 // Defines pin-muxing selection - // for GPIO98 -#define GPIO_GPDGMUX1_GPIO99_S 6 -#define GPIO_GPDGMUX1_GPIO99_M 0xC0 // Defines pin-muxing selection - // for GPIO99 -#define GPIO_GPDGMUX1_GPIO100_S 8 -#define GPIO_GPDGMUX1_GPIO100_M 0x300 // Defines pin-muxing selection - // for GPIO100 -#define GPIO_GPDGMUX1_GPIO101_S 10 -#define GPIO_GPDGMUX1_GPIO101_M 0xC00 // Defines pin-muxing selection - // for GPIO101 -#define GPIO_GPDGMUX1_GPIO102_S 12 -#define GPIO_GPDGMUX1_GPIO102_M 0x3000 // Defines pin-muxing selection - // for GPIO102 -#define GPIO_GPDGMUX1_GPIO103_S 14 -#define GPIO_GPDGMUX1_GPIO103_M 0xC000 // Defines pin-muxing selection - // for GPIO103 -#define GPIO_GPDGMUX1_GPIO104_S 16 -#define GPIO_GPDGMUX1_GPIO104_M 0x30000 // Defines pin-muxing selection - // for GPIO104 -#define GPIO_GPDGMUX1_GPIO105_S 18 -#define GPIO_GPDGMUX1_GPIO105_M 0xC0000 // Defines pin-muxing selection - // for GPIO105 -#define GPIO_GPDGMUX1_GPIO106_S 20 -#define GPIO_GPDGMUX1_GPIO106_M 0x300000 // Defines pin-muxing selection - // for GPIO106 -#define GPIO_GPDGMUX1_GPIO107_S 22 -#define GPIO_GPDGMUX1_GPIO107_M 0xC00000 // Defines pin-muxing selection - // for GPIO107 -#define GPIO_GPDGMUX1_GPIO108_S 24 -#define GPIO_GPDGMUX1_GPIO108_M 0x3000000 // Defines pin-muxing selection - // for GPIO108 -#define GPIO_GPDGMUX1_GPIO109_S 26 -#define GPIO_GPDGMUX1_GPIO109_M 0xC000000 // Defines pin-muxing selection - // for GPIO109 -#define GPIO_GPDGMUX1_GPIO110_S 28 -#define GPIO_GPDGMUX1_GPIO110_M 0x30000000 // Defines pin-muxing selection - // for GPIO110 -#define GPIO_GPDGMUX1_GPIO111_S 30 -#define GPIO_GPDGMUX1_GPIO111_M 0xC0000000 // Defines pin-muxing selection - // for GPIO111 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDGMUX2 register -// -//***************************************************************************** -#define GPIO_GPDGMUX2_GPIO112_S 0 -#define GPIO_GPDGMUX2_GPIO112_M 0x3 // Defines pin-muxing selection - // for GPIO112 -#define GPIO_GPDGMUX2_GPIO113_S 2 -#define GPIO_GPDGMUX2_GPIO113_M 0xC // Defines pin-muxing selection - // for GPIO113 -#define GPIO_GPDGMUX2_GPIO114_S 4 -#define GPIO_GPDGMUX2_GPIO114_M 0x30 // Defines pin-muxing selection - // for GPIO114 -#define GPIO_GPDGMUX2_GPIO115_S 6 -#define GPIO_GPDGMUX2_GPIO115_M 0xC0 // Defines pin-muxing selection - // for GPIO115 -#define GPIO_GPDGMUX2_GPIO116_S 8 -#define GPIO_GPDGMUX2_GPIO116_M 0x300 // Defines pin-muxing selection - // for GPIO116 -#define GPIO_GPDGMUX2_GPIO117_S 10 -#define GPIO_GPDGMUX2_GPIO117_M 0xC00 // Defines pin-muxing selection - // for GPIO117 -#define GPIO_GPDGMUX2_GPIO118_S 12 -#define GPIO_GPDGMUX2_GPIO118_M 0x3000 // Defines pin-muxing selection - // for GPIO118 -#define GPIO_GPDGMUX2_GPIO119_S 14 -#define GPIO_GPDGMUX2_GPIO119_M 0xC000 // Defines pin-muxing selection - // for GPIO119 -#define GPIO_GPDGMUX2_GPIO120_S 16 -#define GPIO_GPDGMUX2_GPIO120_M 0x30000 // Defines pin-muxing selection - // for GPIO120 -#define GPIO_GPDGMUX2_GPIO121_S 18 -#define GPIO_GPDGMUX2_GPIO121_M 0xC0000 // Defines pin-muxing selection - // for GPIO121 -#define GPIO_GPDGMUX2_GPIO122_S 20 -#define GPIO_GPDGMUX2_GPIO122_M 0x300000 // Defines pin-muxing selection - // for GPIO122 -#define GPIO_GPDGMUX2_GPIO123_S 22 -#define GPIO_GPDGMUX2_GPIO123_M 0xC00000 // Defines pin-muxing selection - // for GPIO123 -#define GPIO_GPDGMUX2_GPIO124_S 24 -#define GPIO_GPDGMUX2_GPIO124_M 0x3000000 // Defines pin-muxing selection - // for GPIO124 -#define GPIO_GPDGMUX2_GPIO125_S 26 -#define GPIO_GPDGMUX2_GPIO125_M 0xC000000 // Defines pin-muxing selection - // for GPIO125 -#define GPIO_GPDGMUX2_GPIO126_S 28 -#define GPIO_GPDGMUX2_GPIO126_M 0x30000000 // Defines pin-muxing selection - // for GPIO126 -#define GPIO_GPDGMUX2_GPIO127_S 30 -#define GPIO_GPDGMUX2_GPIO127_M 0xC0000000 // Defines pin-muxing selection - // for GPIO127 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCSEL1 register -// -//***************************************************************************** -#define GPIO_GPDCSEL1_GPIO96_S 0 -#define GPIO_GPDCSEL1_GPIO96_M 0xF // GPIO96 Master CPU Select -#define GPIO_GPDCSEL1_GPIO97_S 4 -#define GPIO_GPDCSEL1_GPIO97_M 0xF0 // GPIO97 Master CPU Select -#define GPIO_GPDCSEL1_GPIO98_S 8 -#define GPIO_GPDCSEL1_GPIO98_M 0xF00 // GPIO98 Master CPU Select -#define GPIO_GPDCSEL1_GPIO99_S 12 -#define GPIO_GPDCSEL1_GPIO99_M 0xF000 // GPIO99 Master CPU Select -#define GPIO_GPDCSEL1_GPIO100_S 16 -#define GPIO_GPDCSEL1_GPIO100_M 0xF0000 // GPIO100 Master CPU Select -#define GPIO_GPDCSEL1_GPIO101_S 20 -#define GPIO_GPDCSEL1_GPIO101_M 0xF00000 // GPIO101 Master CPU Select -#define GPIO_GPDCSEL1_GPIO102_S 24 -#define GPIO_GPDCSEL1_GPIO102_M 0xF000000 // GPIO102 Master CPU Select -#define GPIO_GPDCSEL1_GPIO103_S 28 -#define GPIO_GPDCSEL1_GPIO103_M 0xF0000000 // GPIO103 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCSEL2 register -// -//***************************************************************************** -#define GPIO_GPDCSEL2_GPIO104_S 0 -#define GPIO_GPDCSEL2_GPIO104_M 0xF // GPIO104 Master CPU Select -#define GPIO_GPDCSEL2_GPIO105_S 4 -#define GPIO_GPDCSEL2_GPIO105_M 0xF0 // GPIO105 Master CPU Select -#define GPIO_GPDCSEL2_GPIO106_S 8 -#define GPIO_GPDCSEL2_GPIO106_M 0xF00 // GPIO106 Master CPU Select -#define GPIO_GPDCSEL2_GPIO107_S 12 -#define GPIO_GPDCSEL2_GPIO107_M 0xF000 // GPIO107 Master CPU Select -#define GPIO_GPDCSEL2_GPIO108_S 16 -#define GPIO_GPDCSEL2_GPIO108_M 0xF0000 // GPIO108 Master CPU Select -#define GPIO_GPDCSEL2_GPIO109_S 20 -#define GPIO_GPDCSEL2_GPIO109_M 0xF00000 // GPIO109 Master CPU Select -#define GPIO_GPDCSEL2_GPIO110_S 24 -#define GPIO_GPDCSEL2_GPIO110_M 0xF000000 // GPIO110 Master CPU Select -#define GPIO_GPDCSEL2_GPIO111_S 28 -#define GPIO_GPDCSEL2_GPIO111_M 0xF0000000 // GPIO111 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCSEL3 register -// -//***************************************************************************** -#define GPIO_GPDCSEL3_GPIO112_S 0 -#define GPIO_GPDCSEL3_GPIO112_M 0xF // GPIO112 Master CPU Select -#define GPIO_GPDCSEL3_GPIO113_S 4 -#define GPIO_GPDCSEL3_GPIO113_M 0xF0 // GPIO113 Master CPU Select -#define GPIO_GPDCSEL3_GPIO114_S 8 -#define GPIO_GPDCSEL3_GPIO114_M 0xF00 // GPIO114 Master CPU Select -#define GPIO_GPDCSEL3_GPIO115_S 12 -#define GPIO_GPDCSEL3_GPIO115_M 0xF000 // GPIO115 Master CPU Select -#define GPIO_GPDCSEL3_GPIO116_S 16 -#define GPIO_GPDCSEL3_GPIO116_M 0xF0000 // GPIO116 Master CPU Select -#define GPIO_GPDCSEL3_GPIO117_S 20 -#define GPIO_GPDCSEL3_GPIO117_M 0xF00000 // GPIO117 Master CPU Select -#define GPIO_GPDCSEL3_GPIO118_S 24 -#define GPIO_GPDCSEL3_GPIO118_M 0xF000000 // GPIO118 Master CPU Select -#define GPIO_GPDCSEL3_GPIO119_S 28 -#define GPIO_GPDCSEL3_GPIO119_M 0xF0000000 // GPIO119 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCSEL4 register -// -//***************************************************************************** -#define GPIO_GPDCSEL4_GPIO120_S 0 -#define GPIO_GPDCSEL4_GPIO120_M 0xF // GPIO120 Master CPU Select -#define GPIO_GPDCSEL4_GPIO121_S 4 -#define GPIO_GPDCSEL4_GPIO121_M 0xF0 // GPIO121 Master CPU Select -#define GPIO_GPDCSEL4_GPIO122_S 8 -#define GPIO_GPDCSEL4_GPIO122_M 0xF00 // GPIO122 Master CPU Select -#define GPIO_GPDCSEL4_GPIO123_S 12 -#define GPIO_GPDCSEL4_GPIO123_M 0xF000 // GPIO123 Master CPU Select -#define GPIO_GPDCSEL4_GPIO124_S 16 -#define GPIO_GPDCSEL4_GPIO124_M 0xF0000 // GPIO124 Master CPU Select -#define GPIO_GPDCSEL4_GPIO125_S 20 -#define GPIO_GPDCSEL4_GPIO125_M 0xF00000 // GPIO125 Master CPU Select -#define GPIO_GPDCSEL4_GPIO126_S 24 -#define GPIO_GPDCSEL4_GPIO126_M 0xF000000 // GPIO126 Master CPU Select -#define GPIO_GPDCSEL4_GPIO127_S 28 -#define GPIO_GPDCSEL4_GPIO127_M 0xF0000000 // GPIO127 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDLOCK register -// -//***************************************************************************** -#define GPIO_GPDLOCK_GPIO96 0x1 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO97 0x2 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO98 0x4 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO99 0x8 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO100 0x10 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO101 0x20 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO102 0x40 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO103 0x80 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO104 0x100 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO105 0x200 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO106 0x400 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO107 0x800 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO108 0x1000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO109 0x2000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO110 0x4000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO111 0x8000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO112 0x10000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO113 0x20000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO114 0x40000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO115 0x80000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO116 0x100000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO117 0x200000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO118 0x400000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO119 0x800000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO120 0x1000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO121 0x2000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO122 0x4000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO123 0x8000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO124 0x10000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO125 0x20000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO126 0x40000000 // Configuration Lock bit for this - // pin -#define GPIO_GPDLOCK_GPIO127 0x80000000 // Configuration Lock bit for this - // pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCR register -// -//***************************************************************************** -#define GPIO_GPDCR_GPIO96 0x1 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO97 0x2 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO98 0x4 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO99 0x8 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO100 0x10 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO101 0x20 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO102 0x40 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO103 0x80 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO104 0x100 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO105 0x200 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO106 0x400 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO107 0x800 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO108 0x1000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO109 0x2000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO110 0x4000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO111 0x8000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO112 0x10000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO113 0x20000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO114 0x40000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO115 0x80000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO116 0x100000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO117 0x200000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO118 0x400000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO119 0x800000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO120 0x1000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO121 0x2000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO122 0x4000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO123 0x8000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO124 0x10000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO125 0x20000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO126 0x40000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPDCR_GPIO127 0x80000000 // Configuration lock commit bit - // for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECTRL register -// -//***************************************************************************** -#define GPIO_GPECTRL_QUALPRD0_S 0 -#define GPIO_GPECTRL_QUALPRD0_M 0xFF // Qualification sampling period - // for GPIO128 to GPIO135 -#define GPIO_GPECTRL_QUALPRD1_S 8 -#define GPIO_GPECTRL_QUALPRD1_M 0xFF00 // Qualification sampling period - // for GPIO136 to GPIO143 -#define GPIO_GPECTRL_QUALPRD2_S 16 -#define GPIO_GPECTRL_QUALPRD2_M 0xFF0000 // Qualification sampling period - // for GPIO144 to GPIO151 -#define GPIO_GPECTRL_QUALPRD3_S 24 -#define GPIO_GPECTRL_QUALPRD3_M 0xFF000000 // Qualification sampling period - // for GPIO152 to GPIO159 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEQSEL1 register -// -//***************************************************************************** -#define GPIO_GPEQSEL1_GPIO128_S 0 -#define GPIO_GPEQSEL1_GPIO128_M 0x3 // Select input qualification type - // for GPIO128 -#define GPIO_GPEQSEL1_GPIO129_S 2 -#define GPIO_GPEQSEL1_GPIO129_M 0xC // Select input qualification type - // for GPIO129 -#define GPIO_GPEQSEL1_GPIO130_S 4 -#define GPIO_GPEQSEL1_GPIO130_M 0x30 // Select input qualification type - // for GPIO130 -#define GPIO_GPEQSEL1_GPIO131_S 6 -#define GPIO_GPEQSEL1_GPIO131_M 0xC0 // Select input qualification type - // for GPIO131 -#define GPIO_GPEQSEL1_GPIO132_S 8 -#define GPIO_GPEQSEL1_GPIO132_M 0x300 // Select input qualification type - // for GPIO132 -#define GPIO_GPEQSEL1_GPIO133_S 10 -#define GPIO_GPEQSEL1_GPIO133_M 0xC00 // Select input qualification type - // for GPIO133 -#define GPIO_GPEQSEL1_GPIO134_S 12 -#define GPIO_GPEQSEL1_GPIO134_M 0x3000 // Select input qualification type - // for GPIO134 -#define GPIO_GPEQSEL1_GPIO135_S 14 -#define GPIO_GPEQSEL1_GPIO135_M 0xC000 // Select input qualification type - // for GPIO135 -#define GPIO_GPEQSEL1_GPIO136_S 16 -#define GPIO_GPEQSEL1_GPIO136_M 0x30000 // Select input qualification type - // for GPIO136 -#define GPIO_GPEQSEL1_GPIO137_S 18 -#define GPIO_GPEQSEL1_GPIO137_M 0xC0000 // Select input qualification type - // for GPIO137 -#define GPIO_GPEQSEL1_GPIO138_S 20 -#define GPIO_GPEQSEL1_GPIO138_M 0x300000 // Select input qualification type - // for GPIO138 -#define GPIO_GPEQSEL1_GPIO139_S 22 -#define GPIO_GPEQSEL1_GPIO139_M 0xC00000 // Select input qualification type - // for GPIO139 -#define GPIO_GPEQSEL1_GPIO140_S 24 -#define GPIO_GPEQSEL1_GPIO140_M 0x3000000 // Select input qualification type - // for GPIO140 -#define GPIO_GPEQSEL1_GPIO141_S 26 -#define GPIO_GPEQSEL1_GPIO141_M 0xC000000 // Select input qualification type - // for GPIO141 -#define GPIO_GPEQSEL1_GPIO142_S 28 -#define GPIO_GPEQSEL1_GPIO142_M 0x30000000 // Select input qualification type - // for GPIO142 -#define GPIO_GPEQSEL1_GPIO143_S 30 -#define GPIO_GPEQSEL1_GPIO143_M 0xC0000000 // Select input qualification type - // for GPIO143 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEQSEL2 register -// -//***************************************************************************** -#define GPIO_GPEQSEL2_GPIO144_S 0 -#define GPIO_GPEQSEL2_GPIO144_M 0x3 // Select input qualification type - // for GPIO144 -#define GPIO_GPEQSEL2_GPIO145_S 2 -#define GPIO_GPEQSEL2_GPIO145_M 0xC // Select input qualification type - // for GPIO145 -#define GPIO_GPEQSEL2_GPIO146_S 4 -#define GPIO_GPEQSEL2_GPIO146_M 0x30 // Select input qualification type - // for GPIO146 -#define GPIO_GPEQSEL2_GPIO147_S 6 -#define GPIO_GPEQSEL2_GPIO147_M 0xC0 // Select input qualification type - // for GPIO147 -#define GPIO_GPEQSEL2_GPIO148_S 8 -#define GPIO_GPEQSEL2_GPIO148_M 0x300 // Select input qualification type - // for GPIO148 -#define GPIO_GPEQSEL2_GPIO149_S 10 -#define GPIO_GPEQSEL2_GPIO149_M 0xC00 // Select input qualification type - // for GPIO149 -#define GPIO_GPEQSEL2_GPIO150_S 12 -#define GPIO_GPEQSEL2_GPIO150_M 0x3000 // Select input qualification type - // for GPIO150 -#define GPIO_GPEQSEL2_GPIO151_S 14 -#define GPIO_GPEQSEL2_GPIO151_M 0xC000 // Select input qualification type - // for GPIO151 -#define GPIO_GPEQSEL2_GPIO152_S 16 -#define GPIO_GPEQSEL2_GPIO152_M 0x30000 // Select input qualification type - // for GPIO152 -#define GPIO_GPEQSEL2_GPIO153_S 18 -#define GPIO_GPEQSEL2_GPIO153_M 0xC0000 // Select input qualification type - // for GPIO153 -#define GPIO_GPEQSEL2_GPIO154_S 20 -#define GPIO_GPEQSEL2_GPIO154_M 0x300000 // Select input qualification type - // for GPIO154 -#define GPIO_GPEQSEL2_GPIO155_S 22 -#define GPIO_GPEQSEL2_GPIO155_M 0xC00000 // Select input qualification type - // for GPIO155 -#define GPIO_GPEQSEL2_GPIO156_S 24 -#define GPIO_GPEQSEL2_GPIO156_M 0x3000000 // Select input qualification type - // for GPIO156 -#define GPIO_GPEQSEL2_GPIO157_S 26 -#define GPIO_GPEQSEL2_GPIO157_M 0xC000000 // Select input qualification type - // for GPIO157 -#define GPIO_GPEQSEL2_GPIO158_S 28 -#define GPIO_GPEQSEL2_GPIO158_M 0x30000000 // Select input qualification type - // for GPIO158 -#define GPIO_GPEQSEL2_GPIO159_S 30 -#define GPIO_GPEQSEL2_GPIO159_M 0xC0000000 // Select input qualification type - // for GPIO159 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEMUX1 register -// -//***************************************************************************** -#define GPIO_GPEMUX1_GPIO128_S 0 -#define GPIO_GPEMUX1_GPIO128_M 0x3 // Defines pin-muxing selection - // for GPIO128 -#define GPIO_GPEMUX1_GPIO129_S 2 -#define GPIO_GPEMUX1_GPIO129_M 0xC // Defines pin-muxing selection - // for GPIO129 -#define GPIO_GPEMUX1_GPIO130_S 4 -#define GPIO_GPEMUX1_GPIO130_M 0x30 // Defines pin-muxing selection - // for GPIO130 -#define GPIO_GPEMUX1_GPIO131_S 6 -#define GPIO_GPEMUX1_GPIO131_M 0xC0 // Defines pin-muxing selection - // for GPIO131 -#define GPIO_GPEMUX1_GPIO132_S 8 -#define GPIO_GPEMUX1_GPIO132_M 0x300 // Defines pin-muxing selection - // for GPIO132 -#define GPIO_GPEMUX1_GPIO133_S 10 -#define GPIO_GPEMUX1_GPIO133_M 0xC00 // Defines pin-muxing selection - // for GPIO133 -#define GPIO_GPEMUX1_GPIO134_S 12 -#define GPIO_GPEMUX1_GPIO134_M 0x3000 // Defines pin-muxing selection - // for GPIO134 -#define GPIO_GPEMUX1_GPIO135_S 14 -#define GPIO_GPEMUX1_GPIO135_M 0xC000 // Defines pin-muxing selection - // for GPIO135 -#define GPIO_GPEMUX1_GPIO136_S 16 -#define GPIO_GPEMUX1_GPIO136_M 0x30000 // Defines pin-muxing selection - // for GPIO136 -#define GPIO_GPEMUX1_GPIO137_S 18 -#define GPIO_GPEMUX1_GPIO137_M 0xC0000 // Defines pin-muxing selection - // for GPIO137 -#define GPIO_GPEMUX1_GPIO138_S 20 -#define GPIO_GPEMUX1_GPIO138_M 0x300000 // Defines pin-muxing selection - // for GPIO138 -#define GPIO_GPEMUX1_GPIO139_S 22 -#define GPIO_GPEMUX1_GPIO139_M 0xC00000 // Defines pin-muxing selection - // for GPIO139 -#define GPIO_GPEMUX1_GPIO140_S 24 -#define GPIO_GPEMUX1_GPIO140_M 0x3000000 // Defines pin-muxing selection - // for GPIO140 -#define GPIO_GPEMUX1_GPIO141_S 26 -#define GPIO_GPEMUX1_GPIO141_M 0xC000000 // Defines pin-muxing selection - // for GPIO141 -#define GPIO_GPEMUX1_GPIO142_S 28 -#define GPIO_GPEMUX1_GPIO142_M 0x30000000 // Defines pin-muxing selection - // for GPIO142 -#define GPIO_GPEMUX1_GPIO143_S 30 -#define GPIO_GPEMUX1_GPIO143_M 0xC0000000 // Defines pin-muxing selection - // for GPIO143 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEMUX2 register -// -//***************************************************************************** -#define GPIO_GPEMUX2_GPIO144_S 0 -#define GPIO_GPEMUX2_GPIO144_M 0x3 // Defines pin-muxing selection - // for GPIO144 -#define GPIO_GPEMUX2_GPIO145_S 2 -#define GPIO_GPEMUX2_GPIO145_M 0xC // Defines pin-muxing selection - // for GPIO145 -#define GPIO_GPEMUX2_GPIO146_S 4 -#define GPIO_GPEMUX2_GPIO146_M 0x30 // Defines pin-muxing selection - // for GPIO146 -#define GPIO_GPEMUX2_GPIO147_S 6 -#define GPIO_GPEMUX2_GPIO147_M 0xC0 // Defines pin-muxing selection - // for GPIO147 -#define GPIO_GPEMUX2_GPIO148_S 8 -#define GPIO_GPEMUX2_GPIO148_M 0x300 // Defines pin-muxing selection - // for GPIO148 -#define GPIO_GPEMUX2_GPIO149_S 10 -#define GPIO_GPEMUX2_GPIO149_M 0xC00 // Defines pin-muxing selection - // for GPIO149 -#define GPIO_GPEMUX2_GPIO150_S 12 -#define GPIO_GPEMUX2_GPIO150_M 0x3000 // Defines pin-muxing selection - // for GPIO150 -#define GPIO_GPEMUX2_GPIO151_S 14 -#define GPIO_GPEMUX2_GPIO151_M 0xC000 // Defines pin-muxing selection - // for GPIO151 -#define GPIO_GPEMUX2_GPIO152_S 16 -#define GPIO_GPEMUX2_GPIO152_M 0x30000 // Defines pin-muxing selection - // for GPIO152 -#define GPIO_GPEMUX2_GPIO153_S 18 -#define GPIO_GPEMUX2_GPIO153_M 0xC0000 // Defines pin-muxing selection - // for GPIO153 -#define GPIO_GPEMUX2_GPIO154_S 20 -#define GPIO_GPEMUX2_GPIO154_M 0x300000 // Defines pin-muxing selection - // for GPIO154 -#define GPIO_GPEMUX2_GPIO155_S 22 -#define GPIO_GPEMUX2_GPIO155_M 0xC00000 // Defines pin-muxing selection - // for GPIO155 -#define GPIO_GPEMUX2_GPIO156_S 24 -#define GPIO_GPEMUX2_GPIO156_M 0x3000000 // Defines pin-muxing selection - // for GPIO156 -#define GPIO_GPEMUX2_GPIO157_S 26 -#define GPIO_GPEMUX2_GPIO157_M 0xC000000 // Defines pin-muxing selection - // for GPIO157 -#define GPIO_GPEMUX2_GPIO158_S 28 -#define GPIO_GPEMUX2_GPIO158_M 0x30000000 // Defines pin-muxing selection - // for GPIO158 -#define GPIO_GPEMUX2_GPIO159_S 30 -#define GPIO_GPEMUX2_GPIO159_M 0xC0000000 // Defines pin-muxing selection - // for GPIO159 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEDIR register -// -//***************************************************************************** -#define GPIO_GPEDIR_GPIO128 0x1 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO129 0x2 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO130 0x4 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO131 0x8 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO132 0x10 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO133 0x20 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO134 0x40 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO135 0x80 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO136 0x100 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO137 0x200 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO138 0x400 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO139 0x800 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO140 0x1000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO141 0x2000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO142 0x4000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO143 0x8000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO144 0x10000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO145 0x20000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO146 0x40000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO147 0x80000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO148 0x100000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO149 0x200000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO150 0x400000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO151 0x800000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO152 0x1000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO153 0x2000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO154 0x4000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO155 0x8000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO156 0x10000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO157 0x20000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO158 0x40000000 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPEDIR_GPIO159 0x80000000 // Defines direction for this pin - // in GPIO mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEPUD register -// -//***************************************************************************** -#define GPIO_GPEPUD_GPIO128 0x1 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO129 0x2 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO130 0x4 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO131 0x8 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO132 0x10 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO133 0x20 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO134 0x40 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO135 0x80 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO136 0x100 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO137 0x200 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO138 0x400 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO139 0x800 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO140 0x1000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO141 0x2000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO142 0x4000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO143 0x8000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO144 0x10000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO145 0x20000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO146 0x40000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO147 0x80000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO148 0x100000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO149 0x200000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO150 0x400000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO151 0x800000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO152 0x1000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO153 0x2000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO154 0x4000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO155 0x8000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO156 0x10000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO157 0x20000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO158 0x40000000 // Pull-Up Disable control for - // this pin -#define GPIO_GPEPUD_GPIO159 0x80000000 // Pull-Up Disable control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEINV register -// -//***************************************************************************** -#define GPIO_GPEINV_GPIO128 0x1 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO129 0x2 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO130 0x4 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO131 0x8 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO132 0x10 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO133 0x20 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO134 0x40 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO135 0x80 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO136 0x100 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO137 0x200 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO138 0x400 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO139 0x800 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO140 0x1000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO141 0x2000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO142 0x4000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO143 0x8000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO144 0x10000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO145 0x20000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO146 0x40000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO147 0x80000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO148 0x100000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO149 0x200000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO150 0x400000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO151 0x800000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO152 0x1000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO153 0x2000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO154 0x4000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO155 0x8000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO156 0x10000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO157 0x20000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO158 0x40000000 // Input inversion control for - // this pin -#define GPIO_GPEINV_GPIO159 0x80000000 // Input inversion control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEODR register -// -//***************************************************************************** -#define GPIO_GPEODR_GPIO128 0x1 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO129 0x2 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO130 0x4 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO131 0x8 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO132 0x10 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO133 0x20 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO134 0x40 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO135 0x80 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO136 0x100 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO137 0x200 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO138 0x400 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO139 0x800 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO140 0x1000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO141 0x2000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO142 0x4000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO143 0x8000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO144 0x10000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO145 0x20000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO146 0x40000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO147 0x80000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO148 0x100000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO149 0x200000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO150 0x400000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO151 0x800000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO152 0x1000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO153 0x2000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO154 0x4000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO155 0x8000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO156 0x10000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO157 0x20000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO158 0x40000000 // Outpout Open-Drain control for - // this pin -#define GPIO_GPEODR_GPIO159 0x80000000 // Outpout Open-Drain control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEGMUX1 register -// -//***************************************************************************** -#define GPIO_GPEGMUX1_GPIO128_S 0 -#define GPIO_GPEGMUX1_GPIO128_M 0x3 // Defines pin-muxing selection - // for GPIO128 -#define GPIO_GPEGMUX1_GPIO129_S 2 -#define GPIO_GPEGMUX1_GPIO129_M 0xC // Defines pin-muxing selection - // for GPIO129 -#define GPIO_GPEGMUX1_GPIO130_S 4 -#define GPIO_GPEGMUX1_GPIO130_M 0x30 // Defines pin-muxing selection - // for GPIO130 -#define GPIO_GPEGMUX1_GPIO131_S 6 -#define GPIO_GPEGMUX1_GPIO131_M 0xC0 // Defines pin-muxing selection - // for GPIO131 -#define GPIO_GPEGMUX1_GPIO132_S 8 -#define GPIO_GPEGMUX1_GPIO132_M 0x300 // Defines pin-muxing selection - // for GPIO132 -#define GPIO_GPEGMUX1_GPIO133_S 10 -#define GPIO_GPEGMUX1_GPIO133_M 0xC00 // Defines pin-muxing selection - // for GPIO133 -#define GPIO_GPEGMUX1_GPIO134_S 12 -#define GPIO_GPEGMUX1_GPIO134_M 0x3000 // Defines pin-muxing selection - // for GPIO134 -#define GPIO_GPEGMUX1_GPIO135_S 14 -#define GPIO_GPEGMUX1_GPIO135_M 0xC000 // Defines pin-muxing selection - // for GPIO135 -#define GPIO_GPEGMUX1_GPIO136_S 16 -#define GPIO_GPEGMUX1_GPIO136_M 0x30000 // Defines pin-muxing selection - // for GPIO136 -#define GPIO_GPEGMUX1_GPIO137_S 18 -#define GPIO_GPEGMUX1_GPIO137_M 0xC0000 // Defines pin-muxing selection - // for GPIO137 -#define GPIO_GPEGMUX1_GPIO138_S 20 -#define GPIO_GPEGMUX1_GPIO138_M 0x300000 // Defines pin-muxing selection - // for GPIO138 -#define GPIO_GPEGMUX1_GPIO139_S 22 -#define GPIO_GPEGMUX1_GPIO139_M 0xC00000 // Defines pin-muxing selection - // for GPIO139 -#define GPIO_GPEGMUX1_GPIO140_S 24 -#define GPIO_GPEGMUX1_GPIO140_M 0x3000000 // Defines pin-muxing selection - // for GPIO140 -#define GPIO_GPEGMUX1_GPIO141_S 26 -#define GPIO_GPEGMUX1_GPIO141_M 0xC000000 // Defines pin-muxing selection - // for GPIO141 -#define GPIO_GPEGMUX1_GPIO142_S 28 -#define GPIO_GPEGMUX1_GPIO142_M 0x30000000 // Defines pin-muxing selection - // for GPIO142 -#define GPIO_GPEGMUX1_GPIO143_S 30 -#define GPIO_GPEGMUX1_GPIO143_M 0xC0000000 // Defines pin-muxing selection - // for GPIO143 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEGMUX2 register -// -//***************************************************************************** -#define GPIO_GPEGMUX2_GPIO144_S 0 -#define GPIO_GPEGMUX2_GPIO144_M 0x3 // Defines pin-muxing selection - // for GPIO144 -#define GPIO_GPEGMUX2_GPIO145_S 2 -#define GPIO_GPEGMUX2_GPIO145_M 0xC // Defines pin-muxing selection - // for GPIO145 -#define GPIO_GPEGMUX2_GPIO146_S 4 -#define GPIO_GPEGMUX2_GPIO146_M 0x30 // Defines pin-muxing selection - // for GPIO146 -#define GPIO_GPEGMUX2_GPIO147_S 6 -#define GPIO_GPEGMUX2_GPIO147_M 0xC0 // Defines pin-muxing selection - // for GPIO147 -#define GPIO_GPEGMUX2_GPIO148_S 8 -#define GPIO_GPEGMUX2_GPIO148_M 0x300 // Defines pin-muxing selection - // for GPIO148 -#define GPIO_GPEGMUX2_GPIO149_S 10 -#define GPIO_GPEGMUX2_GPIO149_M 0xC00 // Defines pin-muxing selection - // for GPIO149 -#define GPIO_GPEGMUX2_GPIO150_S 12 -#define GPIO_GPEGMUX2_GPIO150_M 0x3000 // Defines pin-muxing selection - // for GPIO150 -#define GPIO_GPEGMUX2_GPIO151_S 14 -#define GPIO_GPEGMUX2_GPIO151_M 0xC000 // Defines pin-muxing selection - // for GPIO151 -#define GPIO_GPEGMUX2_GPIO152_S 16 -#define GPIO_GPEGMUX2_GPIO152_M 0x30000 // Defines pin-muxing selection - // for GPIO152 -#define GPIO_GPEGMUX2_GPIO153_S 18 -#define GPIO_GPEGMUX2_GPIO153_M 0xC0000 // Defines pin-muxing selection - // for GPIO153 -#define GPIO_GPEGMUX2_GPIO154_S 20 -#define GPIO_GPEGMUX2_GPIO154_M 0x300000 // Defines pin-muxing selection - // for GPIO154 -#define GPIO_GPEGMUX2_GPIO155_S 22 -#define GPIO_GPEGMUX2_GPIO155_M 0xC00000 // Defines pin-muxing selection - // for GPIO155 -#define GPIO_GPEGMUX2_GPIO156_S 24 -#define GPIO_GPEGMUX2_GPIO156_M 0x3000000 // Defines pin-muxing selection - // for GPIO156 -#define GPIO_GPEGMUX2_GPIO157_S 26 -#define GPIO_GPEGMUX2_GPIO157_M 0xC000000 // Defines pin-muxing selection - // for GPIO157 -#define GPIO_GPEGMUX2_GPIO158_S 28 -#define GPIO_GPEGMUX2_GPIO158_M 0x30000000 // Defines pin-muxing selection - // for GPIO158 -#define GPIO_GPEGMUX2_GPIO159_S 30 -#define GPIO_GPEGMUX2_GPIO159_M 0xC0000000 // Defines pin-muxing selection - // for GPIO159 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECSEL1 register -// -//***************************************************************************** -#define GPIO_GPECSEL1_GPIO128_S 0 -#define GPIO_GPECSEL1_GPIO128_M 0xF // GPIO128 Master CPU Select -#define GPIO_GPECSEL1_GPIO129_S 4 -#define GPIO_GPECSEL1_GPIO129_M 0xF0 // GPIO129 Master CPU Select -#define GPIO_GPECSEL1_GPIO130_S 8 -#define GPIO_GPECSEL1_GPIO130_M 0xF00 // GPIO130 Master CPU Select -#define GPIO_GPECSEL1_GPIO131_S 12 -#define GPIO_GPECSEL1_GPIO131_M 0xF000 // GPIO131 Master CPU Select -#define GPIO_GPECSEL1_GPIO132_S 16 -#define GPIO_GPECSEL1_GPIO132_M 0xF0000 // GPIO132 Master CPU Select -#define GPIO_GPECSEL1_GPIO133_S 20 -#define GPIO_GPECSEL1_GPIO133_M 0xF00000 // GPIO133 Master CPU Select -#define GPIO_GPECSEL1_GPIO134_S 24 -#define GPIO_GPECSEL1_GPIO134_M 0xF000000 // GPIO134 Master CPU Select -#define GPIO_GPECSEL1_GPIO135_S 28 -#define GPIO_GPECSEL1_GPIO135_M 0xF0000000 // GPIO135 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECSEL2 register -// -//***************************************************************************** -#define GPIO_GPECSEL2_GPIO136_S 0 -#define GPIO_GPECSEL2_GPIO136_M 0xF // GPIO136 Master CPU Select -#define GPIO_GPECSEL2_GPIO137_S 4 -#define GPIO_GPECSEL2_GPIO137_M 0xF0 // GPIO137 Master CPU Select -#define GPIO_GPECSEL2_GPIO138_S 8 -#define GPIO_GPECSEL2_GPIO138_M 0xF00 // GPIO138 Master CPU Select -#define GPIO_GPECSEL2_GPIO139_S 12 -#define GPIO_GPECSEL2_GPIO139_M 0xF000 // GPIO139 Master CPU Select -#define GPIO_GPECSEL2_GPIO140_S 16 -#define GPIO_GPECSEL2_GPIO140_M 0xF0000 // GPIO140 Master CPU Select -#define GPIO_GPECSEL2_GPIO141_S 20 -#define GPIO_GPECSEL2_GPIO141_M 0xF00000 // GPIO141 Master CPU Select -#define GPIO_GPECSEL2_GPIO142_S 24 -#define GPIO_GPECSEL2_GPIO142_M 0xF000000 // GPIO142 Master CPU Select -#define GPIO_GPECSEL2_GPIO143_S 28 -#define GPIO_GPECSEL2_GPIO143_M 0xF0000000 // GPIO143 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECSEL3 register -// -//***************************************************************************** -#define GPIO_GPECSEL3_GPIO144_S 0 -#define GPIO_GPECSEL3_GPIO144_M 0xF // GPIO144 Master CPU Select -#define GPIO_GPECSEL3_GPIO145_S 4 -#define GPIO_GPECSEL3_GPIO145_M 0xF0 // GPIO145 Master CPU Select -#define GPIO_GPECSEL3_GPIO146_S 8 -#define GPIO_GPECSEL3_GPIO146_M 0xF00 // GPIO146 Master CPU Select -#define GPIO_GPECSEL3_GPIO147_S 12 -#define GPIO_GPECSEL3_GPIO147_M 0xF000 // GPIO147 Master CPU Select -#define GPIO_GPECSEL3_GPIO148_S 16 -#define GPIO_GPECSEL3_GPIO148_M 0xF0000 // GPIO148 Master CPU Select -#define GPIO_GPECSEL3_GPIO149_S 20 -#define GPIO_GPECSEL3_GPIO149_M 0xF00000 // GPIO149 Master CPU Select -#define GPIO_GPECSEL3_GPIO150_S 24 -#define GPIO_GPECSEL3_GPIO150_M 0xF000000 // GPIO150 Master CPU Select -#define GPIO_GPECSEL3_GPIO151_S 28 -#define GPIO_GPECSEL3_GPIO151_M 0xF0000000 // GPIO151 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECSEL4 register -// -//***************************************************************************** -#define GPIO_GPECSEL4_GPIO152_S 0 -#define GPIO_GPECSEL4_GPIO152_M 0xF // GPIO152 Master CPU Select -#define GPIO_GPECSEL4_GPIO153_S 4 -#define GPIO_GPECSEL4_GPIO153_M 0xF0 // GPIO153 Master CPU Select -#define GPIO_GPECSEL4_GPIO154_S 8 -#define GPIO_GPECSEL4_GPIO154_M 0xF00 // GPIO154 Master CPU Select -#define GPIO_GPECSEL4_GPIO155_S 12 -#define GPIO_GPECSEL4_GPIO155_M 0xF000 // GPIO155 Master CPU Select -#define GPIO_GPECSEL4_GPIO156_S 16 -#define GPIO_GPECSEL4_GPIO156_M 0xF0000 // GPIO156 Master CPU Select -#define GPIO_GPECSEL4_GPIO157_S 20 -#define GPIO_GPECSEL4_GPIO157_M 0xF00000 // GPIO157 Master CPU Select -#define GPIO_GPECSEL4_GPIO158_S 24 -#define GPIO_GPECSEL4_GPIO158_M 0xF000000 // GPIO158 Master CPU Select -#define GPIO_GPECSEL4_GPIO159_S 28 -#define GPIO_GPECSEL4_GPIO159_M 0xF0000000 // GPIO159 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPELOCK register -// -//***************************************************************************** -#define GPIO_GPELOCK_GPIO128 0x1 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO129 0x2 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO130 0x4 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO131 0x8 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO132 0x10 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO133 0x20 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO134 0x40 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO135 0x80 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO136 0x100 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO137 0x200 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO138 0x400 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO139 0x800 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO140 0x1000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO141 0x2000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO142 0x4000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO143 0x8000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO144 0x10000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO145 0x20000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO146 0x40000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO147 0x80000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO148 0x100000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO149 0x200000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO150 0x400000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO151 0x800000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO152 0x1000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO153 0x2000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO154 0x4000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO155 0x8000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO156 0x10000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO157 0x20000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO158 0x40000000 // Configuration Lock bit for this - // pin -#define GPIO_GPELOCK_GPIO159 0x80000000 // Configuration Lock bit for this - // pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECR register -// -//***************************************************************************** -#define GPIO_GPECR_GPIO128 0x1 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO129 0x2 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO130 0x4 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO131 0x8 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO132 0x10 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO133 0x20 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO134 0x40 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO135 0x80 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO136 0x100 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO137 0x200 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO138 0x400 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO139 0x800 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO140 0x1000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO141 0x2000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO142 0x4000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO143 0x8000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO144 0x10000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO145 0x20000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO146 0x40000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO147 0x80000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO148 0x100000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO149 0x200000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO150 0x400000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO151 0x800000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO152 0x1000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO153 0x2000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO154 0x4000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO155 0x8000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO156 0x10000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO157 0x20000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO158 0x40000000 // Configuration lock commit bit - // for this pin -#define GPIO_GPECR_GPIO159 0x80000000 // Configuration lock commit bit - // for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFCTRL register -// -//***************************************************************************** -#define GPIO_GPFCTRL_QUALPRD0_S 0 -#define GPIO_GPFCTRL_QUALPRD0_M 0xFF // Qualification sampling period - // for GPIO160 to GPIO167 -#define GPIO_GPFCTRL_QUALPRD1_S 8 -#define GPIO_GPFCTRL_QUALPRD1_M 0xFF00 // Qualification sampling period - // for GPIO168 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFQSEL1 register -// -//***************************************************************************** -#define GPIO_GPFQSEL1_GPIO160_S 0 -#define GPIO_GPFQSEL1_GPIO160_M 0x3 // Select input qualification type - // for GPIO160 -#define GPIO_GPFQSEL1_GPIO161_S 2 -#define GPIO_GPFQSEL1_GPIO161_M 0xC // Select input qualification type - // for GPIO161 -#define GPIO_GPFQSEL1_GPIO162_S 4 -#define GPIO_GPFQSEL1_GPIO162_M 0x30 // Select input qualification type - // for GPIO162 -#define GPIO_GPFQSEL1_GPIO163_S 6 -#define GPIO_GPFQSEL1_GPIO163_M 0xC0 // Select input qualification type - // for GPIO163 -#define GPIO_GPFQSEL1_GPIO164_S 8 -#define GPIO_GPFQSEL1_GPIO164_M 0x300 // Select input qualification type - // for GPIO164 -#define GPIO_GPFQSEL1_GPIO165_S 10 -#define GPIO_GPFQSEL1_GPIO165_M 0xC00 // Select input qualification type - // for GPIO165 -#define GPIO_GPFQSEL1_GPIO166_S 12 -#define GPIO_GPFQSEL1_GPIO166_M 0x3000 // Select input qualification type - // for GPIO166 -#define GPIO_GPFQSEL1_GPIO167_S 14 -#define GPIO_GPFQSEL1_GPIO167_M 0xC000 // Select input qualification type - // for GPIO167 -#define GPIO_GPFQSEL1_GPIO168_S 16 -#define GPIO_GPFQSEL1_GPIO168_M 0x30000 // Select input qualification type - // for GPIO168 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFMUX1 register -// -//***************************************************************************** -#define GPIO_GPFMUX1_GPIO160_S 0 -#define GPIO_GPFMUX1_GPIO160_M 0x3 // Defines pin-muxing selection - // for GPIO160 -#define GPIO_GPFMUX1_GPIO161_S 2 -#define GPIO_GPFMUX1_GPIO161_M 0xC // Defines pin-muxing selection - // for GPIO161 -#define GPIO_GPFMUX1_GPIO162_S 4 -#define GPIO_GPFMUX1_GPIO162_M 0x30 // Defines pin-muxing selection - // for GPIO162 -#define GPIO_GPFMUX1_GPIO163_S 6 -#define GPIO_GPFMUX1_GPIO163_M 0xC0 // Defines pin-muxing selection - // for GPIO163 -#define GPIO_GPFMUX1_GPIO164_S 8 -#define GPIO_GPFMUX1_GPIO164_M 0x300 // Defines pin-muxing selection - // for GPIO164 -#define GPIO_GPFMUX1_GPIO165_S 10 -#define GPIO_GPFMUX1_GPIO165_M 0xC00 // Defines pin-muxing selection - // for GPIO165 -#define GPIO_GPFMUX1_GPIO166_S 12 -#define GPIO_GPFMUX1_GPIO166_M 0x3000 // Defines pin-muxing selection - // for GPIO166 -#define GPIO_GPFMUX1_GPIO167_S 14 -#define GPIO_GPFMUX1_GPIO167_M 0xC000 // Defines pin-muxing selection - // for GPIO167 -#define GPIO_GPFMUX1_GPIO168_S 16 -#define GPIO_GPFMUX1_GPIO168_M 0x30000 // Defines pin-muxing selection - // for GPIO168 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFDIR register -// -//***************************************************************************** -#define GPIO_GPFDIR_GPIO160 0x1 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO161 0x2 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO162 0x4 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO163 0x8 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO164 0x10 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO165 0x20 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO166 0x40 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO167 0x80 // Defines direction for this pin - // in GPIO mode -#define GPIO_GPFDIR_GPIO168 0x100 // Defines direction for this pin - // in GPIO mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFPUD register -// -//***************************************************************************** -#define GPIO_GPFPUD_GPIO160 0x1 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO161 0x2 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO162 0x4 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO163 0x8 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO164 0x10 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO165 0x20 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO166 0x40 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO167 0x80 // Pull-Up Disable control for - // this pin -#define GPIO_GPFPUD_GPIO168 0x100 // Pull-Up Disable control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFINV register -// -//***************************************************************************** -#define GPIO_GPFINV_GPIO160 0x1 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO161 0x2 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO162 0x4 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO163 0x8 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO164 0x10 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO165 0x20 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO166 0x40 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO167 0x80 // Input inversion control for - // this pin -#define GPIO_GPFINV_GPIO168 0x100 // Input inversion control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFODR register -// -//***************************************************************************** -#define GPIO_GPFODR_GPIO160 0x1 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO161 0x2 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO162 0x4 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO163 0x8 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO164 0x10 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO165 0x20 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO166 0x40 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO167 0x80 // Outpout Open-Drain control for - // this pin -#define GPIO_GPFODR_GPIO168 0x100 // Outpout Open-Drain control for - // this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFGMUX1 register -// -//***************************************************************************** -#define GPIO_GPFGMUX1_GPIO160_S 0 -#define GPIO_GPFGMUX1_GPIO160_M 0x3 // Defines pin-muxing selection - // for GPIO160 -#define GPIO_GPFGMUX1_GPIO161_S 2 -#define GPIO_GPFGMUX1_GPIO161_M 0xC // Defines pin-muxing selection - // for GPIO161 -#define GPIO_GPFGMUX1_GPIO162_S 4 -#define GPIO_GPFGMUX1_GPIO162_M 0x30 // Defines pin-muxing selection - // for GPIO162 -#define GPIO_GPFGMUX1_GPIO163_S 6 -#define GPIO_GPFGMUX1_GPIO163_M 0xC0 // Defines pin-muxing selection - // for GPIO163 -#define GPIO_GPFGMUX1_GPIO164_S 8 -#define GPIO_GPFGMUX1_GPIO164_M 0x300 // Defines pin-muxing selection - // for GPIO164 -#define GPIO_GPFGMUX1_GPIO165_S 10 -#define GPIO_GPFGMUX1_GPIO165_M 0xC00 // Defines pin-muxing selection - // for GPIO165 -#define GPIO_GPFGMUX1_GPIO166_S 12 -#define GPIO_GPFGMUX1_GPIO166_M 0x3000 // Defines pin-muxing selection - // for GPIO166 -#define GPIO_GPFGMUX1_GPIO167_S 14 -#define GPIO_GPFGMUX1_GPIO167_M 0xC000 // Defines pin-muxing selection - // for GPIO167 -#define GPIO_GPFGMUX1_GPIO168_S 16 -#define GPIO_GPFGMUX1_GPIO168_M 0x30000 // Defines pin-muxing selection - // for GPIO168 - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFCSEL1 register -// -//***************************************************************************** -#define GPIO_GPFCSEL1_GPIO160_S 0 -#define GPIO_GPFCSEL1_GPIO160_M 0xF // GPIO160 Master CPU Select -#define GPIO_GPFCSEL1_GPIO161_S 4 -#define GPIO_GPFCSEL1_GPIO161_M 0xF0 // GPIO161 Master CPU Select -#define GPIO_GPFCSEL1_GPIO162_S 8 -#define GPIO_GPFCSEL1_GPIO162_M 0xF00 // GPIO162 Master CPU Select -#define GPIO_GPFCSEL1_GPIO163_S 12 -#define GPIO_GPFCSEL1_GPIO163_M 0xF000 // GPIO163 Master CPU Select -#define GPIO_GPFCSEL1_GPIO164_S 16 -#define GPIO_GPFCSEL1_GPIO164_M 0xF0000 // GPIO164 Master CPU Select -#define GPIO_GPFCSEL1_GPIO165_S 20 -#define GPIO_GPFCSEL1_GPIO165_M 0xF00000 // GPIO165 Master CPU Select -#define GPIO_GPFCSEL1_GPIO166_S 24 -#define GPIO_GPFCSEL1_GPIO166_M 0xF000000 // GPIO166 Master CPU Select -#define GPIO_GPFCSEL1_GPIO167_S 28 -#define GPIO_GPFCSEL1_GPIO167_M 0xF0000000 // GPIO167 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFCSEL2 register -// -//***************************************************************************** -#define GPIO_GPFCSEL2_GPIO168_S 0 -#define GPIO_GPFCSEL2_GPIO168_M 0xF // GPIO168 Master CPU Select - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFLOCK register -// -//***************************************************************************** -#define GPIO_GPFLOCK_GPIO160 0x1 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO161 0x2 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO162 0x4 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO163 0x8 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO164 0x10 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO165 0x20 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO166 0x40 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO167 0x80 // Configuration Lock bit for this - // pin -#define GPIO_GPFLOCK_GPIO168 0x100 // Configuration Lock bit for this - // pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFCR register -// -//***************************************************************************** -#define GPIO_GPFCR_GPIO160 0x1 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO161 0x2 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO162 0x4 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO163 0x8 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO164 0x10 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO165 0x20 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO166 0x40 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO167 0x80 // Configuration lock commit bit - // for this pin -#define GPIO_GPFCR_GPIO168 0x100 // Configuration lock commit bit - // for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPADAT register -// -//***************************************************************************** -#define GPIO_GPADAT_GPIO0 0x1 // Data Register for this pin -#define GPIO_GPADAT_GPIO1 0x2 // Data Register for this pin -#define GPIO_GPADAT_GPIO2 0x4 // Data Register for this pin -#define GPIO_GPADAT_GPIO3 0x8 // Data Register for this pin -#define GPIO_GPADAT_GPIO4 0x10 // Data Register for this pin -#define GPIO_GPADAT_GPIO5 0x20 // Data Register for this pin -#define GPIO_GPADAT_GPIO6 0x40 // Data Register for this pin -#define GPIO_GPADAT_GPIO7 0x80 // Data Register for this pin -#define GPIO_GPADAT_GPIO8 0x100 // Data Register for this pin -#define GPIO_GPADAT_GPIO9 0x200 // Data Register for this pin -#define GPIO_GPADAT_GPIO10 0x400 // Data Register for this pin -#define GPIO_GPADAT_GPIO11 0x800 // Data Register for this pin -#define GPIO_GPADAT_GPIO12 0x1000 // Data Register for this pin -#define GPIO_GPADAT_GPIO13 0x2000 // Data Register for this pin -#define GPIO_GPADAT_GPIO14 0x4000 // Data Register for this pin -#define GPIO_GPADAT_GPIO15 0x8000 // Data Register for this pin -#define GPIO_GPADAT_GPIO16 0x10000 // Data Register for this pin -#define GPIO_GPADAT_GPIO17 0x20000 // Data Register for this pin -#define GPIO_GPADAT_GPIO18 0x40000 // Data Register for this pin -#define GPIO_GPADAT_GPIO19 0x80000 // Data Register for this pin -#define GPIO_GPADAT_GPIO20 0x100000 // Data Register for this pin -#define GPIO_GPADAT_GPIO21 0x200000 // Data Register for this pin -#define GPIO_GPADAT_GPIO22 0x400000 // Data Register for this pin -#define GPIO_GPADAT_GPIO23 0x800000 // Data Register for this pin -#define GPIO_GPADAT_GPIO24 0x1000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO25 0x2000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO26 0x4000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO27 0x8000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO28 0x10000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO29 0x20000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO30 0x40000000 // Data Register for this pin -#define GPIO_GPADAT_GPIO31 0x80000000 // Data Register for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPASET register -// -//***************************************************************************** -#define GPIO_GPASET_GPIO0 0x1 // Output Set bit for this pin -#define GPIO_GPASET_GPIO1 0x2 // Output Set bit for this pin -#define GPIO_GPASET_GPIO2 0x4 // Output Set bit for this pin -#define GPIO_GPASET_GPIO3 0x8 // Output Set bit for this pin -#define GPIO_GPASET_GPIO4 0x10 // Output Set bit for this pin -#define GPIO_GPASET_GPIO5 0x20 // Output Set bit for this pin -#define GPIO_GPASET_GPIO6 0x40 // Output Set bit for this pin -#define GPIO_GPASET_GPIO7 0x80 // Output Set bit for this pin -#define GPIO_GPASET_GPIO8 0x100 // Output Set bit for this pin -#define GPIO_GPASET_GPIO9 0x200 // Output Set bit for this pin -#define GPIO_GPASET_GPIO10 0x400 // Output Set bit for this pin -#define GPIO_GPASET_GPIO11 0x800 // Output Set bit for this pin -#define GPIO_GPASET_GPIO12 0x1000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO13 0x2000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO14 0x4000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO15 0x8000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO16 0x10000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO17 0x20000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO18 0x40000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO19 0x80000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO20 0x100000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO21 0x200000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO22 0x400000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO23 0x800000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO24 0x1000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO25 0x2000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO26 0x4000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO27 0x8000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO28 0x10000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO29 0x20000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO30 0x40000000 // Output Set bit for this pin -#define GPIO_GPASET_GPIO31 0x80000000 // Output Set bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPACLEAR register -// -//***************************************************************************** -#define GPIO_GPACLEAR_GPIO0 0x1 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO1 0x2 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO2 0x4 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO3 0x8 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO4 0x10 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO5 0x20 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO6 0x40 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO7 0x80 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO8 0x100 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO9 0x200 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO10 0x400 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO11 0x800 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO12 0x1000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO13 0x2000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO14 0x4000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO15 0x8000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO16 0x10000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO17 0x20000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO18 0x40000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO19 0x80000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO20 0x100000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO21 0x200000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO22 0x400000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO23 0x800000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO24 0x1000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO25 0x2000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO26 0x4000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO27 0x8000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO28 0x10000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO29 0x20000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO30 0x40000000 // Output Clear bit for this pin -#define GPIO_GPACLEAR_GPIO31 0x80000000 // Output Clear bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPATOGGLE register -// -//***************************************************************************** -#define GPIO_GPATOGGLE_GPIO0 0x1 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO1 0x2 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO2 0x4 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO3 0x8 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO4 0x10 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO5 0x20 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO6 0x40 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO7 0x80 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO8 0x100 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO9 0x200 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO10 0x400 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO11 0x800 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO12 0x1000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO13 0x2000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO14 0x4000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO15 0x8000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO16 0x10000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO17 0x20000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO18 0x40000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO19 0x80000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO20 0x100000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO21 0x200000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO22 0x400000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO23 0x800000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO24 0x1000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO25 0x2000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO26 0x4000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO27 0x8000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO28 0x10000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO29 0x20000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO30 0x40000000 // Output Toggle bit for this pin -#define GPIO_GPATOGGLE_GPIO31 0x80000000 // Output Toggle bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBDAT register -// -//***************************************************************************** -#define GPIO_GPBDAT_GPIO32 0x1 // Data Register for this pin -#define GPIO_GPBDAT_GPIO33 0x2 // Data Register for this pin -#define GPIO_GPBDAT_GPIO34 0x4 // Data Register for this pin -#define GPIO_GPBDAT_GPIO35 0x8 // Data Register for this pin -#define GPIO_GPBDAT_GPIO36 0x10 // Data Register for this pin -#define GPIO_GPBDAT_GPIO37 0x20 // Data Register for this pin -#define GPIO_GPBDAT_GPIO38 0x40 // Data Register for this pin -#define GPIO_GPBDAT_GPIO39 0x80 // Data Register for this pin -#define GPIO_GPBDAT_GPIO40 0x100 // Data Register for this pin -#define GPIO_GPBDAT_GPIO41 0x200 // Data Register for this pin -#define GPIO_GPBDAT_GPIO42 0x400 // Data Register for this pin -#define GPIO_GPBDAT_GPIO43 0x800 // Data Register for this pin -#define GPIO_GPBDAT_GPIO44 0x1000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO45 0x2000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO46 0x4000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO47 0x8000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO48 0x10000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO49 0x20000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO50 0x40000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO51 0x80000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO52 0x100000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO53 0x200000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO54 0x400000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO55 0x800000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO56 0x1000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO57 0x2000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO58 0x4000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO59 0x8000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO60 0x10000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO61 0x20000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO62 0x40000000 // Data Register for this pin -#define GPIO_GPBDAT_GPIO63 0x80000000 // Data Register for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBSET register -// -//***************************************************************************** -#define GPIO_GPBSET_GPIO32 0x1 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO33 0x2 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO34 0x4 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO35 0x8 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO36 0x10 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO37 0x20 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO38 0x40 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO39 0x80 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO40 0x100 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO41 0x200 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO42 0x400 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO43 0x800 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO44 0x1000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO45 0x2000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO46 0x4000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO47 0x8000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO48 0x10000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO49 0x20000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO50 0x40000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO51 0x80000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO52 0x100000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO53 0x200000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO54 0x400000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO55 0x800000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO56 0x1000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO57 0x2000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO58 0x4000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO59 0x8000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO60 0x10000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO61 0x20000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO62 0x40000000 // Output Set bit for this pin -#define GPIO_GPBSET_GPIO63 0x80000000 // Output Set bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBCLEAR register -// -//***************************************************************************** -#define GPIO_GPBCLEAR_GPIO32 0x1 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO33 0x2 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO34 0x4 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO35 0x8 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO36 0x10 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO37 0x20 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO38 0x40 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO39 0x80 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO40 0x100 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO41 0x200 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO42 0x400 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO43 0x800 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO44 0x1000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO45 0x2000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO46 0x4000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO47 0x8000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO48 0x10000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO49 0x20000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO50 0x40000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO51 0x80000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO52 0x100000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO53 0x200000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO54 0x400000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO55 0x800000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO56 0x1000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO57 0x2000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO58 0x4000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO59 0x8000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO60 0x10000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO61 0x20000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO62 0x40000000 // Output Clear bit for this pin -#define GPIO_GPBCLEAR_GPIO63 0x80000000 // Output Clear bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPBTOGGLE register -// -//***************************************************************************** -#define GPIO_GPBTOGGLE_GPIO32 0x1 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO33 0x2 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO34 0x4 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO35 0x8 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO36 0x10 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO37 0x20 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO38 0x40 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO39 0x80 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO40 0x100 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO41 0x200 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO42 0x400 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO43 0x800 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO44 0x1000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO45 0x2000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO46 0x4000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO47 0x8000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO48 0x10000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO49 0x20000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO50 0x40000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO51 0x80000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO52 0x100000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO53 0x200000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO54 0x400000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO55 0x800000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO56 0x1000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO57 0x2000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO58 0x4000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO59 0x8000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO60 0x10000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO61 0x20000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO62 0x40000000 // Output Toggle bit for this pin -#define GPIO_GPBTOGGLE_GPIO63 0x80000000 // Output Toggle bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCDAT register -// -//***************************************************************************** -#define GPIO_GPCDAT_GPIO64 0x1 // Data Register for this pin -#define GPIO_GPCDAT_GPIO65 0x2 // Data Register for this pin -#define GPIO_GPCDAT_GPIO66 0x4 // Data Register for this pin -#define GPIO_GPCDAT_GPIO67 0x8 // Data Register for this pin -#define GPIO_GPCDAT_GPIO68 0x10 // Data Register for this pin -#define GPIO_GPCDAT_GPIO69 0x20 // Data Register for this pin -#define GPIO_GPCDAT_GPIO70 0x40 // Data Register for this pin -#define GPIO_GPCDAT_GPIO71 0x80 // Data Register for this pin -#define GPIO_GPCDAT_GPIO72 0x100 // Data Register for this pin -#define GPIO_GPCDAT_GPIO73 0x200 // Data Register for this pin -#define GPIO_GPCDAT_GPIO74 0x400 // Data Register for this pin -#define GPIO_GPCDAT_GPIO75 0x800 // Data Register for this pin -#define GPIO_GPCDAT_GPIO76 0x1000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO77 0x2000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO78 0x4000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO79 0x8000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO80 0x10000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO81 0x20000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO82 0x40000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO83 0x80000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO84 0x100000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO85 0x200000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO86 0x400000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO87 0x800000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO88 0x1000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO89 0x2000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO90 0x4000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO91 0x8000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO92 0x10000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO93 0x20000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO94 0x40000000 // Data Register for this pin -#define GPIO_GPCDAT_GPIO95 0x80000000 // Data Register for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCSET register -// -//***************************************************************************** -#define GPIO_GPCSET_GPIO64 0x1 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO65 0x2 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO66 0x4 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO67 0x8 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO68 0x10 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO69 0x20 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO70 0x40 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO71 0x80 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO72 0x100 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO73 0x200 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO74 0x400 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO75 0x800 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO76 0x1000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO77 0x2000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO78 0x4000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO79 0x8000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO80 0x10000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO81 0x20000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO82 0x40000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO83 0x80000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO84 0x100000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO85 0x200000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO86 0x400000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO87 0x800000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO88 0x1000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO89 0x2000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO90 0x4000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO91 0x8000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO92 0x10000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO93 0x20000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO94 0x40000000 // Output Set bit for this pin -#define GPIO_GPCSET_GPIO95 0x80000000 // Output Set bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCCLEAR register -// -//***************************************************************************** -#define GPIO_GPCCLEAR_GPIO64 0x1 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO65 0x2 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO66 0x4 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO67 0x8 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO68 0x10 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO69 0x20 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO70 0x40 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO71 0x80 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO72 0x100 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO73 0x200 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO74 0x400 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO75 0x800 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO76 0x1000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO77 0x2000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO78 0x4000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO79 0x8000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO80 0x10000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO81 0x20000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO82 0x40000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO83 0x80000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO84 0x100000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO85 0x200000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO86 0x400000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO87 0x800000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO88 0x1000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO89 0x2000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO90 0x4000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO91 0x8000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO92 0x10000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO93 0x20000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO94 0x40000000 // Output Clear bit for this pin -#define GPIO_GPCCLEAR_GPIO95 0x80000000 // Output Clear bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPCTOGGLE register -// -//***************************************************************************** -#define GPIO_GPCTOGGLE_GPIO64 0x1 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO65 0x2 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO66 0x4 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO67 0x8 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO68 0x10 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO69 0x20 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO70 0x40 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO71 0x80 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO72 0x100 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO73 0x200 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO74 0x400 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO75 0x800 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO76 0x1000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO77 0x2000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO78 0x4000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO79 0x8000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO80 0x10000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO81 0x20000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO82 0x40000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO83 0x80000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO84 0x100000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO85 0x200000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO86 0x400000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO87 0x800000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO88 0x1000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO89 0x2000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO90 0x4000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO91 0x8000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO92 0x10000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO93 0x20000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO94 0x40000000 // Output Toggle bit for this pin -#define GPIO_GPCTOGGLE_GPIO95 0x80000000 // Output Toggle bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDDAT register -// -//***************************************************************************** -#define GPIO_GPDDAT_GPIO96 0x1 // Data Register for this pin -#define GPIO_GPDDAT_GPIO97 0x2 // Data Register for this pin -#define GPIO_GPDDAT_GPIO98 0x4 // Data Register for this pin -#define GPIO_GPDDAT_GPIO99 0x8 // Data Register for this pin -#define GPIO_GPDDAT_GPIO100 0x10 // Data Register for this pin -#define GPIO_GPDDAT_GPIO101 0x20 // Data Register for this pin -#define GPIO_GPDDAT_GPIO102 0x40 // Data Register for this pin -#define GPIO_GPDDAT_GPIO103 0x80 // Data Register for this pin -#define GPIO_GPDDAT_GPIO104 0x100 // Data Register for this pin -#define GPIO_GPDDAT_GPIO105 0x200 // Data Register for this pin -#define GPIO_GPDDAT_GPIO106 0x400 // Data Register for this pin -#define GPIO_GPDDAT_GPIO107 0x800 // Data Register for this pin -#define GPIO_GPDDAT_GPIO108 0x1000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO109 0x2000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO110 0x4000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO111 0x8000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO112 0x10000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO113 0x20000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO114 0x40000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO115 0x80000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO116 0x100000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO117 0x200000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO118 0x400000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO119 0x800000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO120 0x1000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO121 0x2000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO122 0x4000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO123 0x8000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO124 0x10000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO125 0x20000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO126 0x40000000 // Data Register for this pin -#define GPIO_GPDDAT_GPIO127 0x80000000 // Data Register for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDSET register -// -//***************************************************************************** -#define GPIO_GPDSET_GPIO96 0x1 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO97 0x2 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO98 0x4 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO99 0x8 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO100 0x10 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO101 0x20 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO102 0x40 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO103 0x80 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO104 0x100 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO105 0x200 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO106 0x400 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO107 0x800 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO108 0x1000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO109 0x2000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO110 0x4000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO111 0x8000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO112 0x10000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO113 0x20000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO114 0x40000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO115 0x80000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO116 0x100000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO117 0x200000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO118 0x400000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO119 0x800000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO120 0x1000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO121 0x2000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO122 0x4000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO123 0x8000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO124 0x10000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO125 0x20000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO126 0x40000000 // Output Set bit for this pin -#define GPIO_GPDSET_GPIO127 0x80000000 // Output Set bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDCLEAR register -// -//***************************************************************************** -#define GPIO_GPDCLEAR_GPIO96 0x1 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO97 0x2 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO98 0x4 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO99 0x8 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO100 0x10 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO101 0x20 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO102 0x40 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO103 0x80 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO104 0x100 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO105 0x200 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO106 0x400 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO107 0x800 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO108 0x1000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO109 0x2000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO110 0x4000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO111 0x8000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO112 0x10000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO113 0x20000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO114 0x40000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO115 0x80000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO116 0x100000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO117 0x200000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO118 0x400000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO119 0x800000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO120 0x1000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO121 0x2000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO122 0x4000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO123 0x8000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO124 0x10000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO125 0x20000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO126 0x40000000 // Output Clear bit for this pin -#define GPIO_GPDCLEAR_GPIO127 0x80000000 // Output Clear bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPDTOGGLE register -// -//***************************************************************************** -#define GPIO_GPDTOGGLE_GPIO96 0x1 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO97 0x2 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO98 0x4 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO99 0x8 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO100 0x10 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO101 0x20 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO102 0x40 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO103 0x80 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO104 0x100 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO105 0x200 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO106 0x400 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO107 0x800 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO108 0x1000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO109 0x2000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO110 0x4000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO111 0x8000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO112 0x10000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO113 0x20000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO114 0x40000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO115 0x80000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO116 0x100000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO117 0x200000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO118 0x400000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO119 0x800000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO120 0x1000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO121 0x2000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO122 0x4000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO123 0x8000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO124 0x10000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO125 0x20000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO126 0x40000000 // Output Toggle bit for this pin -#define GPIO_GPDTOGGLE_GPIO127 0x80000000 // Output Toggle bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPEDAT register -// -//***************************************************************************** -#define GPIO_GPEDAT_GPIO128 0x1 // Data Register for this pin -#define GPIO_GPEDAT_GPIO129 0x2 // Data Register for this pin -#define GPIO_GPEDAT_GPIO130 0x4 // Data Register for this pin -#define GPIO_GPEDAT_GPIO131 0x8 // Data Register for this pin -#define GPIO_GPEDAT_GPIO132 0x10 // Data Register for this pin -#define GPIO_GPEDAT_GPIO133 0x20 // Data Register for this pin -#define GPIO_GPEDAT_GPIO134 0x40 // Data Register for this pin -#define GPIO_GPEDAT_GPIO135 0x80 // Data Register for this pin -#define GPIO_GPEDAT_GPIO136 0x100 // Data Register for this pin -#define GPIO_GPEDAT_GPIO137 0x200 // Data Register for this pin -#define GPIO_GPEDAT_GPIO138 0x400 // Data Register for this pin -#define GPIO_GPEDAT_GPIO139 0x800 // Data Register for this pin -#define GPIO_GPEDAT_GPIO140 0x1000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO141 0x2000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO142 0x4000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO143 0x8000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO144 0x10000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO145 0x20000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO146 0x40000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO147 0x80000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO148 0x100000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO149 0x200000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO150 0x400000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO151 0x800000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO152 0x1000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO153 0x2000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO154 0x4000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO155 0x8000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO156 0x10000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO157 0x20000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO158 0x40000000 // Data Register for this pin -#define GPIO_GPEDAT_GPIO159 0x80000000 // Data Register for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPESET register -// -//***************************************************************************** -#define GPIO_GPESET_GPIO128 0x1 // Output Set bit for this pin -#define GPIO_GPESET_GPIO129 0x2 // Output Set bit for this pin -#define GPIO_GPESET_GPIO130 0x4 // Output Set bit for this pin -#define GPIO_GPESET_GPIO131 0x8 // Output Set bit for this pin -#define GPIO_GPESET_GPIO132 0x10 // Output Set bit for this pin -#define GPIO_GPESET_GPIO133 0x20 // Output Set bit for this pin -#define GPIO_GPESET_GPIO134 0x40 // Output Set bit for this pin -#define GPIO_GPESET_GPIO135 0x80 // Output Set bit for this pin -#define GPIO_GPESET_GPIO136 0x100 // Output Set bit for this pin -#define GPIO_GPESET_GPIO137 0x200 // Output Set bit for this pin -#define GPIO_GPESET_GPIO138 0x400 // Output Set bit for this pin -#define GPIO_GPESET_GPIO139 0x800 // Output Set bit for this pin -#define GPIO_GPESET_GPIO140 0x1000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO141 0x2000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO142 0x4000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO143 0x8000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO144 0x10000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO145 0x20000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO146 0x40000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO147 0x80000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO148 0x100000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO149 0x200000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO150 0x400000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO151 0x800000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO152 0x1000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO153 0x2000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO154 0x4000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO155 0x8000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO156 0x10000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO157 0x20000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO158 0x40000000 // Output Set bit for this pin -#define GPIO_GPESET_GPIO159 0x80000000 // Output Set bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPECLEAR register -// -//***************************************************************************** -#define GPIO_GPECLEAR_GPIO128 0x1 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO129 0x2 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO130 0x4 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO131 0x8 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO132 0x10 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO133 0x20 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO134 0x40 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO135 0x80 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO136 0x100 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO137 0x200 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO138 0x400 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO139 0x800 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO140 0x1000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO141 0x2000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO142 0x4000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO143 0x8000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO144 0x10000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO145 0x20000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO146 0x40000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO147 0x80000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO148 0x100000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO149 0x200000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO150 0x400000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO151 0x800000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO152 0x1000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO153 0x2000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO154 0x4000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO155 0x8000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO156 0x10000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO157 0x20000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO158 0x40000000 // Output Clear bit for this pin -#define GPIO_GPECLEAR_GPIO159 0x80000000 // Output Clear bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPETOGGLE register -// -//***************************************************************************** -#define GPIO_GPETOGGLE_GPIO128 0x1 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO129 0x2 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO130 0x4 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO131 0x8 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO132 0x10 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO133 0x20 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO134 0x40 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO135 0x80 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO136 0x100 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO137 0x200 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO138 0x400 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO139 0x800 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO140 0x1000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO141 0x2000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO142 0x4000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO143 0x8000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO144 0x10000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO145 0x20000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO146 0x40000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO147 0x80000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO148 0x100000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO149 0x200000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO150 0x400000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO151 0x800000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO152 0x1000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO153 0x2000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO154 0x4000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO155 0x8000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO156 0x10000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO157 0x20000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO158 0x40000000 // Output Toggle bit for this pin -#define GPIO_GPETOGGLE_GPIO159 0x80000000 // Output Toggle bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFDAT register -// -//***************************************************************************** -#define GPIO_GPFDAT_GPIO160 0x1 // Data Register for this pin -#define GPIO_GPFDAT_GPIO161 0x2 // Data Register for this pin -#define GPIO_GPFDAT_GPIO162 0x4 // Data Register for this pin -#define GPIO_GPFDAT_GPIO163 0x8 // Data Register for this pin -#define GPIO_GPFDAT_GPIO164 0x10 // Data Register for this pin -#define GPIO_GPFDAT_GPIO165 0x20 // Data Register for this pin -#define GPIO_GPFDAT_GPIO166 0x40 // Data Register for this pin -#define GPIO_GPFDAT_GPIO167 0x80 // Data Register for this pin -#define GPIO_GPFDAT_GPIO168 0x100 // Data Register for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFSET register -// -//***************************************************************************** -#define GPIO_GPFSET_GPIO160 0x1 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO161 0x2 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO162 0x4 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO163 0x8 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO164 0x10 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO165 0x20 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO166 0x40 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO167 0x80 // Output Set bit for this pin -#define GPIO_GPFSET_GPIO168 0x100 // Output Set bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFCLEAR register -// -//***************************************************************************** -#define GPIO_GPFCLEAR_GPIO160 0x1 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO161 0x2 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO162 0x4 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO163 0x8 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO164 0x10 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO165 0x20 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO166 0x40 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO167 0x80 // Output Clear bit for this pin -#define GPIO_GPFCLEAR_GPIO168 0x100 // Output Clear bit for this pin - -//***************************************************************************** -// -// The following are defines for the bit fields in the GPFTOGGLE register -// -//***************************************************************************** -#define GPIO_GPFTOGGLE_GPIO160 0x1 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO161 0x2 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO162 0x4 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO163 0x8 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO164 0x10 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO165 0x20 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO166 0x40 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO167 0x80 // Output Toggle bit for this pin -#define GPIO_GPFTOGGLE_GPIO168 0x100 // Output Toggle bit for this pin -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_i2c.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_i2c.h deleted file mode 100644 index 57a045c8f2..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_i2c.h +++ /dev/null @@ -1,244 +0,0 @@ -//########################################################################### -// -// FILE: hw_i2c.h -// -// TITLE: Definitions for the C28x I2C registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_I2C_H__ -#define __HW_I2C_H__ - -//***************************************************************************** -// -// The following are defines for the I2C register offsets -// -//***************************************************************************** -#define I2C_O_OAR 0x0 // I2C Own address -#define I2C_O_IER 0x1 // I2C Interrupt Enable -#define I2C_O_STR 0x2 // I2C Status -#define I2C_O_CLKL 0x3 // I2C Clock low-time divider -#define I2C_O_CLKH 0x4 // I2C Clock high-time divider -#define I2C_O_CNT 0x5 // I2C Data count -#define I2C_O_DRR 0x6 // I2C Data receive -#define I2C_O_SAR 0x7 // I2C Slave address -#define I2C_O_DXR 0x8 // I2C Data Transmit -#define I2C_O_MDR 0x9 // I2C Mode -#define I2C_O_ISRC 0xA // I2C Interrupt Source -#define I2C_O_EMDR 0xB // I2C Extended Mode -#define I2C_O_PSC 0xC // I2C Prescaler -#define I2C_O_FFTX 0x20 // I2C FIFO Transmit -#define I2C_O_FFRX 0x21 // I2C FIFO Receive - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2COAR register -// -//***************************************************************************** -#define I2C_OAR_OAR_S 0 -#define I2C_OAR_OAR_M 0x3FF // I2C Own address - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CIER register -// -//***************************************************************************** -#define I2C_IER_ARBL 0x1 // Arbitration-lost interrupt - // enable -#define I2C_IER_NACK 0x2 // No-acknowledgment interrupt - // enable -#define I2C_IER_ARDY 0x4 // Register-access-ready interrupt - // enable -#define I2C_IER_RRDY 0x8 // Receive-data-ready interrupt - // enable -#define I2C_IER_XRDY 0x10 // Transmit-data-ready interrupt - // enable -#define I2C_IER_SCD 0x20 // Stop condition detected - // interrupt enable -#define I2C_IER_AAS 0x40 // Addressed as slave interrupt - // enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CSTR register -// -//***************************************************************************** -#define I2C_STR_ARBL 0x1 // Arbitration-lost interrupt flag - // bit -#define I2C_STR_NACK 0x2 // No-acknowledgment interrupt - // flag bit. -#define I2C_STR_ARDY 0x4 // Register-access-ready interrupt - // flag bit -#define I2C_STR_RRDY 0x8 // Receive-data-ready interrupt - // flag bit. -#define I2C_STR_XRDY 0x10 // Transmit-data-ready interrupt - // flag bit. -#define I2C_STR_SCD 0x20 // Stop condition detected bit. -#define I2C_STR_AD0 0x100 // Address 0 bits -#define I2C_STR_AAS 0x200 // Addressed-as-slave bit -#define I2C_STR_XSMT 0x400 // Transmit shift register empty - // bit. -#define I2C_STR_RSFULL 0x800 // Receive shift register full - // bit. -#define I2C_STR_BB 0x1000 // Bus busy bit. -#define I2C_STR_NACKSNT 0x2000 // NACK sent bit. -#define I2C_STR_SDIR 0x4000 // Slave direction bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CCLKL register -// -//***************************************************************************** -#define I2C_CLKL_I2CCLKL_S 0 -#define I2C_CLKL_I2CCLKL_M 0xFFFF // Clock low-time divide-down - // value. - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CCLKH register -// -//***************************************************************************** -#define I2C_CLKH_I2CCLKH_S 0 -#define I2C_CLKH_I2CCLKH_M 0xFFFF // Clock high-time divide-down - // value. - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CCNT register -// -//***************************************************************************** -#define I2C_CNT_I2CCNT_S 0 -#define I2C_CNT_I2CCNT_M 0xFFFF // Data count value. - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CDRR register -// -//***************************************************************************** -#define I2C_DRR_DATA_S 0 -#define I2C_DRR_DATA_M 0xFF // Receive data - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CSAR register -// -//***************************************************************************** -#define I2C_SAR_SAR_S 0 -#define I2C_SAR_SAR_M 0x3FF // Slave Address - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CDXR register -// -//***************************************************************************** -#define I2C_DXR_DATA_S 0 -#define I2C_DXR_DATA_M 0xFF // Transmit data - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CMDR register -// -//***************************************************************************** -#define I2C_MDR_BC_S 0 -#define I2C_MDR_BC_M 0x7 // Bit count bits. -#define I2C_MDR_FDF 0x8 // Free Data Format -#define I2C_MDR_STB 0x10 // START Byte Mode -#define I2C_MDR_IRS 0x20 // I2C Module Reset -#define I2C_MDR_DLB 0x40 // Digital Loopback Mode -#define I2C_MDR_RM 0x80 // Repeat Mode -#define I2C_MDR_XA 0x100 // Expanded Address Mode -#define I2C_MDR_TRX 0x200 // Transmitter Mode -#define I2C_MDR_MST 0x400 // Master Mode -#define I2C_MDR_STP 0x800 // STOP Condition -#define I2C_MDR_STT 0x2000 // START condition bit -#define I2C_MDR_FREE 0x4000 // Debug Action -#define I2C_MDR_NACKMOD 0x8000 // NACK mode bit - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CISRC register -// -//***************************************************************************** -#define I2C_ISRC_INTCODE_S 0 -#define I2C_ISRC_INTCODE_M 0x7 // Interrupt code bits. - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CEMDR register -// -//***************************************************************************** -#define I2C_EMDR_BC 0x1 // Backwards compatibility mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CPSC register -// -//***************************************************************************** -#define I2C_PSC_IPSC_S 0 -#define I2C_PSC_IPSC_M 0xFF // I2C Prescaler Divide Down - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CFFTX register -// -//***************************************************************************** -#define I2C_FFTX_TXFFIL_S 0 -#define I2C_FFTX_TXFFIL_M 0x1F // Transmit FIFO Interrupt Level -#define I2C_FFTX_TXFFIENA 0x20 // Transmit FIFO Interrupt Enable -#define I2C_FFTX_TXFFINTCLR 0x40 // Transmit FIFO Interrupt Flag - // Clear -#define I2C_FFTX_TXFFINT 0x80 // Transmit FIFO Interrupt Flag -#define I2C_FFTX_TXFFST_S 8 -#define I2C_FFTX_TXFFST_M 0x1F00 // Transmit FIFO Status -#define I2C_FFTX_TXFFRST 0x2000 // Transmit FIFO Reset -#define I2C_FFTX_I2CFFEN 0x4000 // Transmit FIFO Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the I2CFFRX register -// -//***************************************************************************** -#define I2C_FFRX_RXFFIL_S 0 -#define I2C_FFRX_RXFFIL_M 0x1F // Receive FIFO Interrupt Level -#define I2C_FFRX_RXFFIENA 0x20 // Receive FIFO Interrupt Enable -#define I2C_FFRX_RXFFINTCLR 0x40 // Receive FIFO Interrupt Flag - // Clear -#define I2C_FFRX_RXFFINT 0x80 // Receive FIFO Interrupt Flag -#define I2C_FFRX_RXFFST_S 8 -#define I2C_FFRX_RXFFST_M 0x1F00 // Receive FIFO Status -#define I2C_FFRX_RXFFRST 0x2000 // Receive FIFO Reset -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ints.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ints.h deleted file mode 100644 index 8f2ca7471f..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_ints.h +++ /dev/null @@ -1,299 +0,0 @@ -//########################################################################### -// -// FILE: hw_ints.h -// -// TITLE: Definitions of interrupt numbers for use with interrupt.c. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_INTS_H__ -#define __HW_INTS_H__ - -//***************************************************************************** -// -// PIE Interrupt Numbers -// -// 0x00FF = PIE Table Row # -// 0xFF00 = PIE Table Column # -// 0xFFFF0000 = PIE Vector ID -// -//***************************************************************************** - -// Lower PIE Group 1 -#define INT_ADCA_CH1 0x200101 //ADC-A Interrupt 1 -#define INT_ADCB_CH1 0x210102 //ADC-B Interrupt 1 -#define INT_ADCC_CH1 0x220103 //ADC-C Interrupt 1 -#define INT_XINT1 0x230104 //External Interrupt 1 -#define INT_XINT2 0x240105 //External Interrupt 2 -#define INT_ADCD_CH1 0x250106 //ADC-D Interrupt 1 -#define INT_TINT0 0x260107 //Timer Interrupt 0 -#define INT_WAKEINT 0x270108 //Wakeup Interrupt - -// Lower PIE Group 2 -#define INT_PWM1TZ 0x280201 //PWM TZ Interrupt 1 -#define INT_PWM2TZ 0x290202 //PWM TZ Interrupt 2 -#define INT_PWM3TZ 0x2A0203 //PWM TZ Interrupt 3 -#define INT_PWM4TZ 0x2B0204 //PWM TZ Interrupt 4 -#define INT_PWM5TZ 0x2C0205 //PWM TZ Interrupt 5 -#define INT_PWM6TZ 0x2D0206 //PWM TZ Interrupt 6 -#define INT_PWM7TZ 0x2E0207 //PWM TZ Interrupt 7 -#define INT_PWM8TZ 0x2F0208 //PWM TZ Interrupt 8 - -// Lower PIE Group 3 -#define INT_PWM1INT 0x300301 //PWM Interrupt 1 -#define INT_PWM2INT 0x310302 //PWM Interrupt 2 -#define INT_PWM3INT 0x320303 //PWM Interrupt 3 -#define INT_PWM4INT 0x330304 //PWM Interrupt 4 -#define INT_PWM5INT 0x340305 //PWM Interrupt 5 -#define INT_PWM6INT 0x350306 //PWM Interrupt 6 -#define INT_PWM7INT 0x360307 //PWM Interrupt 7 -#define INT_PWM8INT 0x370308 //PWM Interrupt 8 - -// Lower PIE Group 4 -#define INT_CAP1INT 0x380401 //Capture Interrupt 1 -#define INT_CAP2INT 0x390402 //Capture Interrupt 2 -#define INT_CAP3INT 0x3A0403 //Capture Interrupt 3 -#define INT_CAP4INT 0x3B0404 //Capture Interrupt 4 -#define INT_CAP5INT 0x3C0405 //Capture Interrupt 5 -#define INT_CAP6INT 0x3D0406 //Capture Interrupt 6 -#define INT_CAP7INT 0x3E0407 //Capture Interrupt 7 -#define INT_CAP8INT 0x3F0408 //Capture Interrupt 8 - -// Lower PIE Group 5 -#define INT_EQEP1INT 0x400501 //Quadrature Interrupt 1 -#define INT_EQEP2INT 0x410502 //Quadrature Interrupt 2 -#define INT_EQEP3INT 0x420503 //Quadrature Interrupt 3 -#define INT_EQEP4INT 0x430504 //Quadrature Interrupt 4 -#define INT_CLB1INT 0x440505 //CLB Interrupt 1 -#define INT_CLB2INT 0x450506 //CLB Interrupt 2 -#define INT_CLB3INT 0x460507 //CLB Interrupt 3 -#define INT_CLB4INT 0x470508 //CLB Interrupt 4 - -// Lower PIE Group 6 -#define INT_SPIRXINTA 0x480601 //SPI-A Receive Interrupt -#define INT_SPITXINTA 0x490602 //SPI-A Transmit Interrupt -#define INT_SPIRXINTB 0x4A0603 //SPI-B Receive Interrupt -#define INT_SPITXINTB 0x4B0604 //SPI-B Transmit Interrupt -#define INT_MRINTA 0x4C0605 //McBSP-A Receive Interrupt -#define INT_MXINTA 0x4D0606 //McBSP-A Transmit Interrupt -#define INT_MRINTB 0x4E0607 //McBSP-B Receive Interrupt -#define INT_MXINTB 0x4F0608 //McBSP-B Transmit Interrupt - -// Lower PIE Group 7 -#define INT_DMA1INT 0x500701 //DMA Channel 1 Interrupt -#define INT_DMA2INT 0x510702 //DMA Channel 2 Interrupt -#define INT_DMA3INT 0x520703 //DMA Channel 3 Interrupt -#define INT_DMA4INT 0x530704 //DMA Channel 4 Interrupt -#define INT_DMA5INT 0x540705 //DMA Channel 5 Interrupt -#define INT_DMA6INT 0x550706 //DMA Channel 6 Interrupt - -// Lower PIE Group 8 -#define INT_I2CINT1A 0x580801 //I2C-A Basic Interrupts -#define INT_I2CINT2A 0x590802 //I2C-A FIFO Interrupts -#define INT_I2CINT1B 0x5A0803 //I2C-B Basic Interrupts -#define INT_I2CINT2B 0x5B0804 //I2C-B FIFO Interrupts -#define INT_SCICRX 0x5C0805 //SCI-C Receive Interrupt -#define INT_SCICTX 0x5D0806 //SCI-C Transmit Interrupt -#define INT_SCIDRX 0x5E0807 //SCI-D Receive Interrupt -#define INT_SCIDTX 0x5F0808 //SCI-D Transmit Interrupt - -// Lower PIE Group 9 -#define INT_SCIRXINTA 0x600901 //SCI-A RX Interrupt -#define INT_SCITXINTA 0x610902 //SCI-A TX Interrupt -#define INT_SCIRXINTB 0x620903 //SCI-B RX Interrupt -#define INT_SCITXINTB 0x630904 //SCI-B TX Interrupt -#define INT_CANA_0 0x640905 //CANA 0 Interrupt -#define INT_CANA_1 0x650906 //CANA 1 Interrupt -#define INT_CANB_0 0x660907 //CANB 0 Interrupt -#define INT_CANB_1 0x670908 //CANB 1 Interrupt - -// Lower PIE Group 10 -#define INT_ADCA_EVT 0x680A01 //ADCA_EVT Interrupt -#define INT_ADCA_CH2 0x690A02 //ADCA_CH2 Interrupt 2 -#define INT_ADCA_CH3 0x6A0A03 //ADCA_CH3 Interrupt 3 -#define INT_ADCA_CH4 0x6B0A04 //ADCA_CH4 Interrupt 4 -#define INT_ADCB_EVT 0x6C0A05 //ADCB_EVT Interrupt -#define INT_ADCB_CH2 0x6D0A06 //ADCB_CH2 Interrupt 2 -#define INT_ADCB_CH3 0x6E0A07 //ADCB_CH3 Interrupt 3 -#define INT_ADCB_CH4 0x6F0A08 //ADCB_CH4 Interrupt 4 - -// Lower PIE Group 11 -#define INT_CLA1INT1 0x700B01 //CLA_1 Interrupt 1 -#define INT_CLA1INT2 0x710B02 //CLA_1 Interrupt 2 -#define INT_CLA1INT3 0x720B03 //CLA_1 Interrupt 3 -#define INT_CLA1INT4 0x730B04 //CLA_1 Interrupt 4 -#define INT_CLA1INT5 0x740B05 //CLA_1 Interrupt 5 -#define INT_CLA1INT6 0x750B06 //CLA_1 Interrupt 6 -#define INT_CLA1INT7 0x760B07 //CLA_1 Interrupt 7 -#define INT_CLA1INT8 0x770B08 //CLA_1 Interrupt 8 - -// Lower PIE Group 12 -#define INT_XINT3 0x780C01 //External Interrupt 3 -#define INT_XINT4 0x790C02 //External Interrupt 4 -#define INT_XINT5 0x7A0C03 //External Interrupt 5 -#define INT_FMC 0x7C0C05 //FMC Interrupt -#define INT_VCU 0x7D0C06 //VCU Interrupt -#define INT_LVF 0x7E0C07 //Latched Overflow -#define INT_LUF 0x7F0C08 //Latched Underflow - -// Upper PIE Group 1 -#define INT_IPC0INT 0x84010D //IPC Interrupt 1 -#define INT_IPC1INT 0x85010E //IPC Interrupt 2 -#define INT_IPC2INT 0x86010F //IPC Interrupt 3 -#define INT_IPC3INT 0x870110 //IPC Interrupt 4 - -// Upper PIE Group 2 -#define INT_PWM9TZ 0x880209 //PWM TZ Interrupt 9 -#define INT_PWM10TZ 0x89020A //PWM TZ Interrupt 10 -#define INT_PWM11TZ 0x8A020B //PWM TZ Interrupt 11 -#define INT_PWM12TZ 0x8B020C //PWM TZ Interrupt 12 - -// Upper PIE Group 3 -#define INT_PWM9INT 0x900309 //PWM Interrupt 9 -#define INT_PWM10INT 0x91030A //PWN Interrupt 10 -#define INT_PWM11INT 0x92030B //PWM Interrupt 11 -#define INT_PWM12INT 0x93030C //PWM Interrupt 12 - -// Upper PIE Group 4 -#define INT_HRCAP1INT 0x980409 //High-Res Capture Interrupt 1 -#define INT_HRCAP2INT 0x99040A //High-Res Capture Interrupt 2 -#define INT_HRCAP3INT 0x9A040B //High-Res Capture Interrupt 3 -#define INT_HRCAP4INT 0x9B040C //High-Res Capture Interrupt 4 -#define INT_HRCAP5INT 0x9C040D //High-Res Capture Interrupt 1 -#define INT_HRCAP6INT 0x9D040E //High-Res Capture Interrupt 2 -#define INT_HRCAP7INT 0x9E040F //High-Res Capture Interrupt 3 -#define INT_HRCAP8INT 0x9F0410 //High-Res Capture Interrupt 4 - -// Upper PIE Group 5 -#define INT_SDFM1INT 0xA00509 //SDFM Interrupt 1 -#define INT_SDFM2INT 0xA1050A //SDFM Interrupt 2 -#define INT_SDFM3INT 0xA2050B //SDFM Interrupt 3 -#define INT_SDFM4INT 0xA3050C //SDFM Interrupt 4 -#define INT_SDFM5INT 0xA4050D //SDFM Interrupt 5 -#define INT_SDFM6INT 0xA5050E //SDFM Interrupt 6 -#define INT_SDFM7INT 0xA6050F //SDFM Interrupt 7 -#define INT_SDFM8INT 0xA70510 //SDFM Interrupt 8 - -// Upper PIE Group 6 -#define INT_SPIRXINTC 0xA80609 //SPI-A Receive Interrupt -#define INT_SPITXINTC 0xA9060A //SPI-A Transmit Interrupt -#define INT_SPIRXINTD 0xAA060B //SPI-B Receive Interrupt -#define INT_SPITXINTD 0xAB060C //SPI-B Transmit Interrupt - -// Upper PIE Group 8 -#define INT_UPPAINT 0xBE080F //UPP-A Interrupt -#define INT_UPPBINT 0xBF0810 //UPP-B Interrupt - -// Upper PIE Group 9 -#define INT_CANCINT1 0xC00909 //CANC 1 Interrupt -#define INT_CANCINT2 0xC1090A //CANC 2 Interrupt -#define INT_CANDINT1 0xC2090B //CAND 1 Interrupt -#define INT_CANDINT2 0xC3090C //CAND 2 Interrupt -#define INT_USBAINT 0xC6090F //USBA Interrupt -#define INT_USBBINT 0xC70910 //USBB Interrupt - -// Upper PIE Group 10 -#define INT_ADCC_EVT 0xC80A09 //ADCC_EVT Interrupt -#define INT_ADCC_CH2 0xC90A0A //ADCC_CH2 Interrupt 2 -#define INT_ADCC_CH3 0xCA0A0B //ADCC_CH3 Interrupt 3 -#define INT_ADCC_CH4 0xCB0A0C //ADCC_CH4 Interrupt 4 -#define INT_ADCD_EVT 0xCC0A0D //ADCD_EVT Interrupt -#define INT_ADCD_CH2 0xCD0A0E //ADCD_CH2 Interrupt 2 -#define INT_ADCD_CH3 0xCE0A0F //ADCD_CH3 Interrupt 3 -#define INT_ADCD_CH4 0xCF0A10 //ADCD_CH4 Interrupt 4 - -// Upper PIE Group 11 -#define INT_CLA2INT1 0xD00B09 //CLA_2 Interrupt 1 -#define INT_CLA2INT2 0xD10B0A //CLA_2 Interrupt 2 -#define INT_CLA2INT3 0xD20B0B //CLA_2 Interrupt 3 -#define INT_CLA2INT4 0xD30B0C //CLA_2 Interrupt 4 -#define INT_CLA2INT5 0xD40B0D //CLA_2 Interrupt 1 -#define INT_CLA2INT6 0xD50B0E //CLA_2 Interrupt 2 -#define INT_CLA2INT7 0xD60B0F //CLA_2 Interrupt 3 -#define INT_CLA2INT8 0xD70B10 //CLA_2 Interrupt 4 - -// Upper PIE Group 12 -#define INT_EMIF_ERR 0xD80C09 //EMIF Error Interrupt -#define INT_RAM_CORR_ERR 0xD90C0A //RAM Correctable Error Interrupt -#define INT_FLASH_CORR_ERR 0xDA0C0B //Flash correctable Error Interrupt -#define INT_RAM_ACC_VIO 0xDB0C0C //RAM Access Violation Interrupt -#define INT_SYS_PLL_SLIP 0xDC0C0D //System PLL Slip Interrupt -#define INT_AUX_PLL_SLIP 0xDD0C0E //Auxillary PLL Slip Interrupt -#define INT_CLA_OF 0xDE0C0F //CLA Overflow Interrupt -#define INT_CLA_UF 0xDF0C10 //CLA Underflow Interrupt - -//Workaround for Stellaris code -#define INT_USB0 INT_USBAINT // USB 0 Controller - -//Workaround for other interrupts -#define INT_RESET 0x000000 //Reset Interrupt -#define INT_INT1 0x010000 //Not Used -#define INT_INT2 0x020000 //Not Used -#define INT_INT3 0x030000 //Not Used -#define INT_INT4 0x040000 //Not Used -#define INT_INT5 0x050000 //Not Used -#define INT_INT6 0x060000 //Not Used -#define INT_INT7 0x070000 //Not Used -#define INT_INT8 0x080000 //Not Used -#define INT_INT9 0x090000 //Not Used -#define INT_INT10 0x0A0000 //Not Used -#define INT_INT11 0x0B0000 //Not Used -#define INT_INT12 0x0C0000 //Not Used -#define INT_TINT1 0x0D0D00 //Timer Interrupt 1 -#define INT_TINT2 0x0E0E00 //Timer Interrupt 2 -#define INT_DATALOG 0x0F0F00 //CPU Data Logging Interrupt -#define INT_RTOSINT 0x101000 //CPU Real Time OS Interrupt -#define INT_EMUINT 0x110000 //CPU Emulation Interrupt -#define INT_NMI 0x120000 //External Non-Maskable Interrupt -#define INT_ILLEGAL 0x130000 //Illegal Operation -#define INT_USER1 0x140000 //User-defined -#define INT_USER2 0x150000 //User-defined -#define INT_USER3 0x160000 //User-defined -#define INT_USER4 0x170000 //User-defined -#define INT_USER5 0x180000 //User-defined -#define INT_USER6 0x190000 //User-defined -#define INT_USER7 0x1A0000 //User-defined -#define INT_USER8 0x1B0000 //User-defined -#define INT_USER9 0x1C0000 //User-defined -#define INT_USER10 0x1D0000 //User-defined -#define INT_USER11 0x1E0000 //User-defined -#define INT_USER12 0x1F0000 //User-defined - - -#endif // __HW_INTS_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_memmap.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_memmap.h deleted file mode 100644 index 94c774807a..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_memmap.h +++ /dev/null @@ -1,96 +0,0 @@ -//########################################################################### -// -// FILE: hw_memmap.h -// -// TITLE: Macros defining the memory map of the C28x. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_MEMMAP_H__ -#define __HW_MEMMAP_H__ - -//***************************************************************************** -// -// The following are defines for the base address of the memories and -// peripherals. -// -//***************************************************************************** - -#define USB0_BASE 0x00040000 // USB 0 Controller - -#define ADCA_RESULT_BASE 0x00000B00 // ADC-A Result -#define ADCB_RESULT_BASE 0x00000B20 // ADC-B Result -#define ADCC_RESULT_BASE 0x00000B40 // ADC-C Result -#define ADCD_RESULT_BASE 0x00000B60 // ADC-D Result - -#define ADCA_BASE 0x00007400 // ADC-A -#define ADCB_BASE 0x00007480 // ADC-B -#define ADCC_BASE 0x00007500 // ADC-C -#define ADCD_BASE 0x00007580 // ADC-D - -#define CMPSS1_BASE 0x00005C80 // CMPSS-1 -#define CMPSS2_BASE 0x00005CA0 // CMPSS-2 -#define CMPSS3_BASE 0x00005CC0 // CMPSS-3 -#define CMPSS4_BASE 0x00005CE0 // CMPSS-4 -#define CMPSS5_BASE 0x00005D00 // CMPSS-5 -#define CMPSS6_BASE 0x00005D20 // CMPSS-6 -#define CMPSS7_BASE 0x00005D40 // CMPSS-7 -#define CMPSS8_BASE 0x00005D60 // CMPSS-8 - -#define I2CA_BASE 0x00007300 // I2C-A -#define I2CB_BASE 0x00007340 // I2C-B - -#define UARTA_BASE 0x00007200 // SCI-A -#define UARTB_BASE 0x00007210 // SCI-B -#define UARTC_BASE 0x00007220 // SCI-C -#define UARTD_BASE 0x00007230 // SCI-D - -#define EQEP1_BASE 0x00005100 // Enhanced EQEP-1 -#define EQEP2_BASE 0x00005140 // Enhanced EQEP-2 -#define EQEP3_BASE 0x00005180 // Enhanced EQEP-3 - -#define SPIA_BASE 0x00006100 // SPI-A -#define SPIB_BASE 0x00006110 // SPI-B -#define SPIC_BASE 0x00006120 // SPI-C - -#define CANA_BASE 0x00048000 // CAN-A -#define CANB_BASE 0x0004A000 // CAN-B -#define CANA_MSG_RAM 0x00049000 -#define CANB_MSG_RAM 0x0004B000 - -#endif // __HW_MEMMAP_H__ - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_types.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_types.h deleted file mode 100644 index 59edb8ce16..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_types.h +++ /dev/null @@ -1,88 +0,0 @@ -//########################################################################### -// -// FILE: hw_types.h -// -// TITLE: Type definitions used in ALL driverlib functions. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_TYPES_H__ -#define __HW_TYPES_H__ - -//***************************************************************************** -// -// Define fake 8 bit types for USB related code. -// -//***************************************************************************** - -typedef uint16_t uint8_t; -typedef int16_t int8_t; - -//***************************************************************************** -// -// Macros for hardware access, both direct and via the bit-band region. -// -//***************************************************************************** -#define HWREG(x) \ - (*((volatile uint32_t *)(x))) -#define HWREGH(x) \ - (*((volatile uint16_t *)(x))) -#define HWREGB(x) \ - __byte((int *)(x),0) -//Emulated Bitbanded write -#define HWREGBITW(address, mask, value) \ - (*(volatile uint32_t *)(address)) = \ - ((*(volatile uint32_t *)(address)) & ~((uint32_t)1 << mask)) \ - | ((uint32_t)value << mask) -//Emulated Bitbanded read -#define HWREGBITR(address, mask) \ - (((*(volatile uint32_t *)(address)) & ((uint32_t)1 << mask)) >> mask) - -//Emulated Bitbanded write -#define HWREGBITHW(address, mask, value) \ - (*(volatile uint16_t *)(address)) = \ - ((*(volatile uint16_t *)(address)) & ~((uint16_t)1 << mask)) \ - | ((uint16_t)value << mask) -//Emulated Bitbanded read -#define HWREGBITHR(address, mask) \ - (((*(volatile uint16_t *)(address)) & ((uint16_t)1 << mask)) >> mask) - - - -#endif // __HW_TYPES_H__ - - diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_uart.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_uart.h deleted file mode 100644 index c788095feb..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_uart.h +++ /dev/null @@ -1,208 +0,0 @@ -//########################################################################### -// -// FILE: hw_uart.h -// -// TITLE: Definitions for the C28x SCI registers. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __HW_UART_H__ -#define __HW_UART_H__ - -//***************************************************************************** -// -// The following are defines for the SCI register offsets -// -//***************************************************************************** -#define UART_O_CCR 0x0 // Communications control register -#define UART_O_CTL1 0x1 // Control register 1 -#define UART_O_HBAUD 0x2 // Baud rate (high) register -#define UART_O_LBAUD 0x3 // Baud rate (low) register -#define UART_O_CTL2 0x4 // Control register 2 -#define UART_O_RXST 0x5 // Receive status register -#define UART_O_RXEMU 0x6 // Receive emulation buffer - // register -#define UART_O_RXBUF 0x7 // Receive data buffer -#define UART_O_TXBUF 0x9 // Transmit data buffer -#define UART_O_FFTX 0xA // FIFO transmit register -#define UART_O_FFRX 0xB // FIFO receive register -#define UART_O_FFCT 0xC // FIFO control register -#define UART_O_PRI 0xF // FIFO Priority control - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCICCR register -// -//***************************************************************************** -#define UART_CCR_SCICHAR_S 0 -#define UART_CCR_SCICHAR_M 0x7 // Character length control -#define UART_CCR_ADDRIDLE_MODE 0x8 // ADDR/IDLE Mode control -#define UART_CCR_LOOPBKENA 0x10 // Loop Back enable -#define UART_CCR_PARITYENA 0x20 // Parity enable -#define UART_CCR_PARITY 0x40 // Even or Odd Parity -#define UART_CCR_STOPBITS 0x80 // Number of Stop Bits - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCICTL1 register -// -//***************************************************************************** -#define UART_CTL1_RXENA 0x1 // SCI receiver enable -#define UART_CTL1_TXENA 0x2 // SCI transmitter enable -#define UART_CTL1_SLEEP 0x4 // SCI sleep -#define UART_CTL1_TXWAKE 0x8 // Transmitter wakeup method -#define UART_CTL1_SWRESET 0x20 // Software reset -#define UART_CTL1_RXERRINTENA 0x40 // Receive __interrupt enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIHBAUD register -// -//***************************************************************************** -#define UART_HBAUD_BAUD_S 0 -#define UART_HBAUD_BAUD_M 0xFFFF // SCI 16-bit baud selection - // Registers SCIHBAUD - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCILBAUD register -// -//***************************************************************************** -#define UART_LBAUD_BAUD_S 0 -#define UART_LBAUD_BAUD_M 0xFFFF // SCI 16-bit baud selection - // Registers SCILBAUD - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCICTL2 register -// -//***************************************************************************** -#define UART_CTL2_TXINTENA 0x1 // Transmit __interrupt enable -#define UART_CTL2_RXBKINTENA 0x2 // Receiver-buffer break enable -#define UART_CTL2_TXEMPTY 0x40 // Transmitter empty flag -#define UART_CTL2_TXRDY 0x80 // Transmitter ready flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIRXST register -// -//***************************************************************************** -#define UART_RXST_RXWAKE 0x2 // Receiver wakeup detect flag -#define UART_RXST_PE 0x4 // Parity error flag -#define UART_RXST_OE 0x8 // Overrun error flag -#define UART_RXST_FE 0x10 // Framing error flag -#define UART_RXST_BRKDT 0x20 // Break-detect flag -#define UART_RXST_RXRDY 0x40 // Receiver ready flag -#define UART_RXST_RXERROR 0x80 // Receiver error flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIRXEMU register -// -//***************************************************************************** -#define UART_RXEMU_ERXDT_S 0 -#define UART_RXEMU_ERXDT_M 0xFF // Receive emulation buffer data - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIRXBUF register -// -//***************************************************************************** -#define UART_RXBUF_SAR_S 0 -#define UART_RXBUF_SAR_M 0xFF // Receive Character bits -#define UART_RXBUF_SCIFFPE 0x4000 // Receiver error flag -#define UART_RXBUF_SCIFFFE 0x8000 // Receiver error flag - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCITXBUF register -// -//***************************************************************************** -#define UART_TXBUF_TXDT_S 0 -#define UART_TXBUF_TXDT_M 0xFF // Transmit data buffer - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIFFTX register -// -//***************************************************************************** -#define UART_FFTX_TXFFIL_S 0 -#define UART_FFTX_TXFFIL_M 0x1F // Interrupt level -#define UART_FFTX_TXFFIENA 0x20 // Interrupt enable -#define UART_FFTX_TXFFINTCLR 0x40 // Clear INT flag -#define UART_FFTX_TXFFINT 0x80 // INT flag -#define UART_FFTX_TXFFST_S 8 -#define UART_FFTX_TXFFST_M 0x1F00 // FIFO status -#define UART_FFTX_TXFIFORESET 0x2000 // FIFO reset -#define UART_FFTX_SCIFFENA 0x4000 // Enhancement enable -#define UART_FFTX_SCIRST 0x8000 // SCI reset rx/tx channels - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIFFRX register -// -//***************************************************************************** -#define UART_FFRX_RXFFIL_S 0 -#define UART_FFRX_RXFFIL_M 0x1F // Interrupt level -#define UART_FFRX_RXFFIENA 0x20 // Interrupt enable -#define UART_FFRX_RXFFINTCLR 0x40 // Clear INT flag -#define UART_FFRX_RXFFINT 0x80 // INT flag -#define UART_FFRX_RXFFST_S 8 -#define UART_FFRX_RXFFST_M 0x1F00 // FIFO status -#define UART_FFRX_RXFIFORESET 0x2000 // FIFO reset -#define UART_FFRX_RXFFOVRCLR 0x4000 // Clear overflow -#define UART_FFRX_RXFFOVF 0x8000 // FIFO overflow - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIFFCT register -// -//***************************************************************************** -#define UART_FFCT_FFTXDLY_S 0 -#define UART_FFCT_FFTXDLY_M 0xFF // FIFO transmit delay -#define UART_FFCT_CDC 0x2000 // Auto baud mode enable -#define UART_FFCT_ABDCLR 0x4000 // Auto baud clear -#define UART_FFCT_ABD 0x8000 // Auto baud detect - -//***************************************************************************** -// -// The following are defines for the bit fields in the SCIPRI register -// -//***************************************************************************** -#define UART_PRI_FREESOFT_S 3 -#define UART_PRI_FREESOFT_M 0x18 // Emulation modes -#endif diff --git a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_usb.h b/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_usb.h deleted file mode 100644 index 9602cb7a15..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/inc/hw_usb.h +++ /dev/null @@ -1,4611 +0,0 @@ -//***************************************************************************** -// -// hw_usb.h - Macros for use in accessing the USB registers. -// -// Copyright (c) 2007-2012 Texas Instruments Incorporated. All rights reserved. -// Software License Agreement -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// This is part of revision 9453 of the Stellaris Firmware Development Package. -// -//***************************************************************************** - -#ifndef __HW_USB_H__ -#define __HW_USB_H__ - -//***************************************************************************** -// -// The following are defines for the Univeral Serial Bus register offsets. -// -//***************************************************************************** -#define USB_O_FADDR 0x00000000 // USB Device Functional Address -#define USB_O_POWER 0x00000001 // USB Power -#define USB_O_TXIS 0x00000002 // USB Transmit Interrupt Status -#define USB_O_RXIS 0x00000004 // USB Receive Interrupt Status -#define USB_O_TXIE 0x00000006 // USB Transmit Interrupt Enable -#define USB_O_RXIE 0x00000008 // USB Receive Interrupt Enable -#define USB_O_IS 0x0000000A // USB General Interrupt Status -#define USB_O_IE 0x0000000B // USB Interrupt Enable -#define USB_O_FRAME 0x0000000C // USB Frame Value -#define USB_O_EPIDX 0x0000000E // USB Endpoint Index -#define USB_O_TEST 0x0000000F // USB Test Mode -#define USB_O_FIFO0 0x00000020 // USB FIFO Endpoint 0 -#define USB_O_FIFO1 0x00000024 // USB FIFO Endpoint 1 -#define USB_O_FIFO2 0x00000028 // USB FIFO Endpoint 2 -#define USB_O_FIFO3 0x0000002C // USB FIFO Endpoint 3 -#define USB_O_FIFO4 0x00000030 // USB FIFO Endpoint 4 -#define USB_O_FIFO5 0x00000034 // USB FIFO Endpoint 5 -#define USB_O_FIFO6 0x00000038 // USB FIFO Endpoint 6 -#define USB_O_FIFO7 0x0000003C // USB FIFO Endpoint 7 -#define USB_O_FIFO8 0x00000040 // USB FIFO Endpoint 8 -#define USB_O_FIFO9 0x00000044 // USB FIFO Endpoint 9 -#define USB_O_FIFO10 0x00000048 // USB FIFO Endpoint 10 -#define USB_O_FIFO11 0x0000004C // USB FIFO Endpoint 11 -#define USB_O_FIFO12 0x00000050 // USB FIFO Endpoint 12 -#define USB_O_FIFO13 0x00000054 // USB FIFO Endpoint 13 -#define USB_O_FIFO14 0x00000058 // USB FIFO Endpoint 14 -#define USB_O_FIFO15 0x0000005C // USB FIFO Endpoint 15 -#define USB_O_DEVCTL 0x00000060 // USB Device Control -#define USB_O_TXFIFOSZ 0x00000062 // USB Transmit Dynamic FIFO Sizing -#define USB_O_RXFIFOSZ 0x00000063 // USB Receive Dynamic FIFO Sizing -#define USB_O_TXFIFOADD 0x00000064 // USB Transmit FIFO Start Address -#define USB_O_RXFIFOADD 0x00000066 // USB Receive FIFO Start Address -#define USB_O_CONTIM 0x0000007A // USB Connect Timing -#define USB_O_VPLEN 0x0000007B // USB OTG VBUS Pulse Timing -#define USB_O_FSEOF 0x0000007D // USB Full-Speed Last Transaction - // to End of Frame Timing -#define USB_O_LSEOF 0x0000007E // USB Low-Speed Last Transaction - // to End of Frame Timing -#define USB_O_TXFUNCADDR0 0x00000080 // USB Transmit Functional Address - // Endpoint 0 -#define USB_O_TXHUBADDR0 0x00000082 // USB Transmit Hub Address - // Endpoint 0 -#define USB_O_TXHUBPORT0 0x00000083 // USB Transmit Hub Port Endpoint 0 -#define USB_O_TXFUNCADDR1 0x00000088 // USB Transmit Functional Address - // Endpoint 1 -#define USB_O_TXHUBADDR1 0x0000008A // USB Transmit Hub Address - // Endpoint 1 -#define USB_O_TXHUBPORT1 0x0000008B // USB Transmit Hub Port Endpoint 1 -#define USB_O_RXFUNCADDR1 0x0000008C // USB Receive Functional Address - // Endpoint 1 -#define USB_O_RXHUBADDR1 0x0000008E // USB Receive Hub Address Endpoint - // 1 -#define USB_O_RXHUBPORT1 0x0000008F // USB Receive Hub Port Endpoint 1 -#define USB_O_TXFUNCADDR2 0x00000090 // USB Transmit Functional Address - // Endpoint 2 -#define USB_O_TXHUBADDR2 0x00000092 // USB Transmit Hub Address - // Endpoint 2 -#define USB_O_TXHUBPORT2 0x00000093 // USB Transmit Hub Port Endpoint 2 -#define USB_O_RXFUNCADDR2 0x00000094 // USB Receive Functional Address - // Endpoint 2 -#define USB_O_RXHUBADDR2 0x00000096 // USB Receive Hub Address Endpoint - // 2 -#define USB_O_RXHUBPORT2 0x00000097 // USB Receive Hub Port Endpoint 2 -#define USB_O_TXFUNCADDR3 0x00000098 // USB Transmit Functional Address - // Endpoint 3 -#define USB_O_TXHUBADDR3 0x0000009A // USB Transmit Hub Address - // Endpoint 3 -#define USB_O_TXHUBPORT3 0x0000009B // USB Transmit Hub Port Endpoint 3 -#define USB_O_RXFUNCADDR3 0x0000009C // USB Receive Functional Address - // Endpoint 3 -#define USB_O_RXHUBADDR3 0x0000009E // USB Receive Hub Address Endpoint - // 3 -#define USB_O_RXHUBPORT3 0x0000009F // USB Receive Hub Port Endpoint 3 -#define USB_O_TXFUNCADDR4 0x000000A0 // USB Transmit Functional Address - // Endpoint 4 -#define USB_O_TXHUBADDR4 0x000000A2 // USB Transmit Hub Address - // Endpoint 4 -#define USB_O_TXHUBPORT4 0x000000A3 // USB Transmit Hub Port Endpoint 4 -#define USB_O_RXFUNCADDR4 0x000000A4 // USB Receive Functional Address - // Endpoint 4 -#define USB_O_RXHUBADDR4 0x000000A6 // USB Receive Hub Address Endpoint - // 4 -#define USB_O_RXHUBPORT4 0x000000A7 // USB Receive Hub Port Endpoint 4 -#define USB_O_TXFUNCADDR5 0x000000A8 // USB Transmit Functional Address - // Endpoint 5 -#define USB_O_TXHUBADDR5 0x000000AA // USB Transmit Hub Address - // Endpoint 5 -#define USB_O_TXHUBPORT5 0x000000AB // USB Transmit Hub Port Endpoint 5 -#define USB_O_RXFUNCADDR5 0x000000AC // USB Receive Functional Address - // Endpoint 5 -#define USB_O_RXHUBADDR5 0x000000AE // USB Receive Hub Address Endpoint - // 5 -#define USB_O_RXHUBPORT5 0x000000AF // USB Receive Hub Port Endpoint 5 -#define USB_O_TXFUNCADDR6 0x000000B0 // USB Transmit Functional Address - // Endpoint 6 -#define USB_O_TXHUBADDR6 0x000000B2 // USB Transmit Hub Address - // Endpoint 6 -#define USB_O_TXHUBPORT6 0x000000B3 // USB Transmit Hub Port Endpoint 6 -#define USB_O_RXFUNCADDR6 0x000000B4 // USB Receive Functional Address - // Endpoint 6 -#define USB_O_RXHUBADDR6 0x000000B6 // USB Receive Hub Address Endpoint - // 6 -#define USB_O_RXHUBPORT6 0x000000B7 // USB Receive Hub Port Endpoint 6 -#define USB_O_TXFUNCADDR7 0x000000B8 // USB Transmit Functional Address - // Endpoint 7 -#define USB_O_TXHUBADDR7 0x000000BA // USB Transmit Hub Address - // Endpoint 7 -#define USB_O_TXHUBPORT7 0x000000BB // USB Transmit Hub Port Endpoint 7 -#define USB_O_RXFUNCADDR7 0x000000BC // USB Receive Functional Address - // Endpoint 7 -#define USB_O_RXHUBADDR7 0x000000BE // USB Receive Hub Address Endpoint - // 7 -#define USB_O_RXHUBPORT7 0x000000BF // USB Receive Hub Port Endpoint 7 -#define USB_O_TXFUNCADDR8 0x000000C0 // USB Transmit Functional Address - // Endpoint 8 -#define USB_O_TXHUBADDR8 0x000000C2 // USB Transmit Hub Address - // Endpoint 8 -#define USB_O_TXHUBPORT8 0x000000C3 // USB Transmit Hub Port Endpoint 8 -#define USB_O_RXFUNCADDR8 0x000000C4 // USB Receive Functional Address - // Endpoint 8 -#define USB_O_RXHUBADDR8 0x000000C6 // USB Receive Hub Address Endpoint - // 8 -#define USB_O_RXHUBPORT8 0x000000C7 // USB Receive Hub Port Endpoint 8 -#define USB_O_TXFUNCADDR9 0x000000C8 // USB Transmit Functional Address - // Endpoint 9 -#define USB_O_TXHUBADDR9 0x000000CA // USB Transmit Hub Address - // Endpoint 9 -#define USB_O_TXHUBPORT9 0x000000CB // USB Transmit Hub Port Endpoint 9 -#define USB_O_RXFUNCADDR9 0x000000CC // USB Receive Functional Address - // Endpoint 9 -#define USB_O_RXHUBADDR9 0x000000CE // USB Receive Hub Address Endpoint - // 9 -#define USB_O_RXHUBPORT9 0x000000CF // USB Receive Hub Port Endpoint 9 -#define USB_O_TXFUNCADDR10 0x000000D0 // USB Transmit Functional Address - // Endpoint 10 -#define USB_O_TXHUBADDR10 0x000000D2 // USB Transmit Hub Address - // Endpoint 10 -#define USB_O_TXHUBPORT10 0x000000D3 // USB Transmit Hub Port Endpoint - // 10 -#define USB_O_RXFUNCADDR10 0x000000D4 // USB Receive Functional Address - // Endpoint 10 -#define USB_O_RXHUBADDR10 0x000000D6 // USB Receive Hub Address Endpoint - // 10 -#define USB_O_RXHUBPORT10 0x000000D7 // USB Receive Hub Port Endpoint 10 -#define USB_O_TXFUNCADDR11 0x000000D8 // USB Transmit Functional Address - // Endpoint 11 -#define USB_O_TXHUBADDR11 0x000000DA // USB Transmit Hub Address - // Endpoint 11 -#define USB_O_TXHUBPORT11 0x000000DB // USB Transmit Hub Port Endpoint - // 11 -#define USB_O_RXFUNCADDR11 0x000000DC // USB Receive Functional Address - // Endpoint 11 -#define USB_O_RXHUBADDR11 0x000000DE // USB Receive Hub Address Endpoint - // 11 -#define USB_O_RXHUBPORT11 0x000000DF // USB Receive Hub Port Endpoint 11 -#define USB_O_TXFUNCADDR12 0x000000E0 // USB Transmit Functional Address - // Endpoint 12 -#define USB_O_TXHUBADDR12 0x000000E2 // USB Transmit Hub Address - // Endpoint 12 -#define USB_O_TXHUBPORT12 0x000000E3 // USB Transmit Hub Port Endpoint - // 12 -#define USB_O_RXFUNCADDR12 0x000000E4 // USB Receive Functional Address - // Endpoint 12 -#define USB_O_RXHUBADDR12 0x000000E6 // USB Receive Hub Address Endpoint - // 12 -#define USB_O_RXHUBPORT12 0x000000E7 // USB Receive Hub Port Endpoint 12 -#define USB_O_TXFUNCADDR13 0x000000E8 // USB Transmit Functional Address - // Endpoint 13 -#define USB_O_TXHUBADDR13 0x000000EA // USB Transmit Hub Address - // Endpoint 13 -#define USB_O_TXHUBPORT13 0x000000EB // USB Transmit Hub Port Endpoint - // 13 -#define USB_O_RXFUNCADDR13 0x000000EC // USB Receive Functional Address - // Endpoint 13 -#define USB_O_RXHUBADDR13 0x000000EE // USB Receive Hub Address Endpoint - // 13 -#define USB_O_RXHUBPORT13 0x000000EF // USB Receive Hub Port Endpoint 13 -#define USB_O_TXFUNCADDR14 0x000000F0 // USB Transmit Functional Address - // Endpoint 14 -#define USB_O_TXHUBADDR14 0x000000F2 // USB Transmit Hub Address - // Endpoint 14 -#define USB_O_TXHUBPORT14 0x000000F3 // USB Transmit Hub Port Endpoint - // 14 -#define USB_O_RXFUNCADDR14 0x000000F4 // USB Receive Functional Address - // Endpoint 14 -#define USB_O_RXHUBADDR14 0x000000F6 // USB Receive Hub Address Endpoint - // 14 -#define USB_O_RXHUBPORT14 0x000000F7 // USB Receive Hub Port Endpoint 14 -#define USB_O_TXFUNCADDR15 0x000000F8 // USB Transmit Functional Address - // Endpoint 15 -#define USB_O_TXHUBADDR15 0x000000FA // USB Transmit Hub Address - // Endpoint 15 -#define USB_O_TXHUBPORT15 0x000000FB // USB Transmit Hub Port Endpoint - // 15 -#define USB_O_RXFUNCADDR15 0x000000FC // USB Receive Functional Address - // Endpoint 15 -#define USB_O_RXHUBADDR15 0x000000FE // USB Receive Hub Address Endpoint - // 15 -#define USB_O_RXHUBPORT15 0x000000FF // USB Receive Hub Port Endpoint 15 -#define USB_O_CSRL0 0x00000102 // USB Control and Status Endpoint - // 0 Low -#define USB_O_CSRH0 0x00000103 // USB Control and Status Endpoint - // 0 High -#define USB_O_COUNT0 0x00000108 // USB Receive Byte Count Endpoint - // 0 -#define USB_O_TYPE0 0x0000010A // USB Type Endpoint 0 -#define USB_O_NAKLMT 0x0000010B // USB NAK Limit -#define USB_O_TXMAXP1 0x00000110 // USB Maximum Transmit Data - // Endpoint 1 -#define USB_O_TXCSRL1 0x00000112 // USB Transmit Control and Status - // Endpoint 1 Low -#define USB_O_TXCSRH1 0x00000113 // USB Transmit Control and Status - // Endpoint 1 High -#define USB_O_RXMAXP1 0x00000114 // USB Maximum Receive Data - // Endpoint 1 -#define USB_O_RXCSRL1 0x00000116 // USB Receive Control and Status - // Endpoint 1 Low -#define USB_O_RXCSRH1 0x00000117 // USB Receive Control and Status - // Endpoint 1 High -#define USB_O_RXCOUNT1 0x00000118 // USB Receive Byte Count Endpoint - // 1 -#define USB_O_TXTYPE1 0x0000011A // USB Host Transmit Configure Type - // Endpoint 1 -#define USB_O_TXINTERVAL1 0x0000011B // USB Host Transmit Interval - // Endpoint 1 -#define USB_O_RXTYPE1 0x0000011C // USB Host Configure Receive Type - // Endpoint 1 -#define USB_O_RXINTERVAL1 0x0000011D // USB Host Receive Polling - // Interval Endpoint 1 -#define USB_O_TXMAXP2 0x00000120 // USB Maximum Transmit Data - // Endpoint 2 -#define USB_O_TXCSRL2 0x00000122 // USB Transmit Control and Status - // Endpoint 2 Low -#define USB_O_TXCSRH2 0x00000123 // USB Transmit Control and Status - // Endpoint 2 High -#define USB_O_RXMAXP2 0x00000124 // USB Maximum Receive Data - // Endpoint 2 -#define USB_O_RXCSRL2 0x00000126 // USB Receive Control and Status - // Endpoint 2 Low -#define USB_O_RXCSRH2 0x00000127 // USB Receive Control and Status - // Endpoint 2 High -#define USB_O_RXCOUNT2 0x00000128 // USB Receive Byte Count Endpoint - // 2 -#define USB_O_TXTYPE2 0x0000012A // USB Host Transmit Configure Type - // Endpoint 2 -#define USB_O_TXINTERVAL2 0x0000012B // USB Host Transmit Interval - // Endpoint 2 -#define USB_O_RXTYPE2 0x0000012C // USB Host Configure Receive Type - // Endpoint 2 -#define USB_O_RXINTERVAL2 0x0000012D // USB Host Receive Polling - // Interval Endpoint 2 -#define USB_O_TXMAXP3 0x00000130 // USB Maximum Transmit Data - // Endpoint 3 -#define USB_O_TXCSRL3 0x00000132 // USB Transmit Control and Status - // Endpoint 3 Low -#define USB_O_TXCSRH3 0x00000133 // USB Transmit Control and Status - // Endpoint 3 High -#define USB_O_RXMAXP3 0x00000134 // USB Maximum Receive Data - // Endpoint 3 -#define USB_O_RXCSRL3 0x00000136 // USB Receive Control and Status - // Endpoint 3 Low -#define USB_O_RXCSRH3 0x00000137 // USB Receive Control and Status - // Endpoint 3 High -#define USB_O_RXCOUNT3 0x00000138 // USB Receive Byte Count Endpoint - // 3 -#define USB_O_TXTYPE3 0x0000013A // USB Host Transmit Configure Type - // Endpoint 3 -#define USB_O_TXINTERVAL3 0x0000013B // USB Host Transmit Interval - // Endpoint 3 -#define USB_O_RXTYPE3 0x0000013C // USB Host Configure Receive Type - // Endpoint 3 -#define USB_O_RXINTERVAL3 0x0000013D // USB Host Receive Polling - // Interval Endpoint 3 -#define USB_O_TXMAXP4 0x00000140 // USB Maximum Transmit Data - // Endpoint 4 -#define USB_O_TXCSRL4 0x00000142 // USB Transmit Control and Status - // Endpoint 4 Low -#define USB_O_TXCSRH4 0x00000143 // USB Transmit Control and Status - // Endpoint 4 High -#define USB_O_RXMAXP4 0x00000144 // USB Maximum Receive Data - // Endpoint 4 -#define USB_O_RXCSRL4 0x00000146 // USB Receive Control and Status - // Endpoint 4 Low -#define USB_O_RXCSRH4 0x00000147 // USB Receive Control and Status - // Endpoint 4 High -#define USB_O_RXCOUNT4 0x00000148 // USB Receive Byte Count Endpoint - // 4 -#define USB_O_TXTYPE4 0x0000014A // USB Host Transmit Configure Type - // Endpoint 4 -#define USB_O_TXINTERVAL4 0x0000014B // USB Host Transmit Interval - // Endpoint 4 -#define USB_O_RXTYPE4 0x0000014C // USB Host Configure Receive Type - // Endpoint 4 -#define USB_O_RXINTERVAL4 0x0000014D // USB Host Receive Polling - // Interval Endpoint 4 -#define USB_O_TXMAXP5 0x00000150 // USB Maximum Transmit Data - // Endpoint 5 -#define USB_O_TXCSRL5 0x00000152 // USB Transmit Control and Status - // Endpoint 5 Low -#define USB_O_TXCSRH5 0x00000153 // USB Transmit Control and Status - // Endpoint 5 High -#define USB_O_RXMAXP5 0x00000154 // USB Maximum Receive Data - // Endpoint 5 -#define USB_O_RXCSRL5 0x00000156 // USB Receive Control and Status - // Endpoint 5 Low -#define USB_O_RXCSRH5 0x00000157 // USB Receive Control and Status - // Endpoint 5 High -#define USB_O_RXCOUNT5 0x00000158 // USB Receive Byte Count Endpoint - // 5 -#define USB_O_TXTYPE5 0x0000015A // USB Host Transmit Configure Type - // Endpoint 5 -#define USB_O_TXINTERVAL5 0x0000015B // USB Host Transmit Interval - // Endpoint 5 -#define USB_O_RXTYPE5 0x0000015C // USB Host Configure Receive Type - // Endpoint 5 -#define USB_O_RXINTERVAL5 0x0000015D // USB Host Receive Polling - // Interval Endpoint 5 -#define USB_O_TXMAXP6 0x00000160 // USB Maximum Transmit Data - // Endpoint 6 -#define USB_O_TXCSRL6 0x00000162 // USB Transmit Control and Status - // Endpoint 6 Low -#define USB_O_TXCSRH6 0x00000163 // USB Transmit Control and Status - // Endpoint 6 High -#define USB_O_RXMAXP6 0x00000164 // USB Maximum Receive Data - // Endpoint 6 -#define USB_O_RXCSRL6 0x00000166 // USB Receive Control and Status - // Endpoint 6 Low -#define USB_O_RXCSRH6 0x00000167 // USB Receive Control and Status - // Endpoint 6 High -#define USB_O_RXCOUNT6 0x00000168 // USB Receive Byte Count Endpoint - // 6 -#define USB_O_TXTYPE6 0x0000016A // USB Host Transmit Configure Type - // Endpoint 6 -#define USB_O_TXINTERVAL6 0x0000016B // USB Host Transmit Interval - // Endpoint 6 -#define USB_O_RXTYPE6 0x0000016C // USB Host Configure Receive Type - // Endpoint 6 -#define USB_O_RXINTERVAL6 0x0000016D // USB Host Receive Polling - // Interval Endpoint 6 -#define USB_O_TXMAXP7 0x00000170 // USB Maximum Transmit Data - // Endpoint 7 -#define USB_O_TXCSRL7 0x00000172 // USB Transmit Control and Status - // Endpoint 7 Low -#define USB_O_TXCSRH7 0x00000173 // USB Transmit Control and Status - // Endpoint 7 High -#define USB_O_RXMAXP7 0x00000174 // USB Maximum Receive Data - // Endpoint 7 -#define USB_O_RXCSRL7 0x00000176 // USB Receive Control and Status - // Endpoint 7 Low -#define USB_O_RXCSRH7 0x00000177 // USB Receive Control and Status - // Endpoint 7 High -#define USB_O_RXCOUNT7 0x00000178 // USB Receive Byte Count Endpoint - // 7 -#define USB_O_TXTYPE7 0x0000017A // USB Host Transmit Configure Type - // Endpoint 7 -#define USB_O_TXINTERVAL7 0x0000017B // USB Host Transmit Interval - // Endpoint 7 -#define USB_O_RXTYPE7 0x0000017C // USB Host Configure Receive Type - // Endpoint 7 -#define USB_O_RXINTERVAL7 0x0000017D // USB Host Receive Polling - // Interval Endpoint 7 -#define USB_O_TXMAXP8 0x00000180 // USB Maximum Transmit Data - // Endpoint 8 -#define USB_O_TXCSRL8 0x00000182 // USB Transmit Control and Status - // Endpoint 8 Low -#define USB_O_TXCSRH8 0x00000183 // USB Transmit Control and Status - // Endpoint 8 High -#define USB_O_RXMAXP8 0x00000184 // USB Maximum Receive Data - // Endpoint 8 -#define USB_O_RXCSRL8 0x00000186 // USB Receive Control and Status - // Endpoint 8 Low -#define USB_O_RXCSRH8 0x00000187 // USB Receive Control and Status - // Endpoint 8 High -#define USB_O_RXCOUNT8 0x00000188 // USB Receive Byte Count Endpoint - // 8 -#define USB_O_TXTYPE8 0x0000018A // USB Host Transmit Configure Type - // Endpoint 8 -#define USB_O_TXINTERVAL8 0x0000018B // USB Host Transmit Interval - // Endpoint 8 -#define USB_O_RXTYPE8 0x0000018C // USB Host Configure Receive Type - // Endpoint 8 -#define USB_O_RXINTERVAL8 0x0000018D // USB Host Receive Polling - // Interval Endpoint 8 -#define USB_O_TXMAXP9 0x00000190 // USB Maximum Transmit Data - // Endpoint 9 -#define USB_O_TXCSRL9 0x00000192 // USB Transmit Control and Status - // Endpoint 9 Low -#define USB_O_TXCSRH9 0x00000193 // USB Transmit Control and Status - // Endpoint 9 High -#define USB_O_RXMAXP9 0x00000194 // USB Maximum Receive Data - // Endpoint 9 -#define USB_O_RXCSRL9 0x00000196 // USB Receive Control and Status - // Endpoint 9 Low -#define USB_O_RXCSRH9 0x00000197 // USB Receive Control and Status - // Endpoint 9 High -#define USB_O_RXCOUNT9 0x00000198 // USB Receive Byte Count Endpoint - // 9 -#define USB_O_TXTYPE9 0x0000019A // USB Host Transmit Configure Type - // Endpoint 9 -#define USB_O_TXINTERVAL9 0x0000019B // USB Host Transmit Interval - // Endpoint 9 -#define USB_O_RXTYPE9 0x0000019C // USB Host Configure Receive Type - // Endpoint 9 -#define USB_O_RXINTERVAL9 0x0000019D // USB Host Receive Polling - // Interval Endpoint 9 -#define USB_O_TXMAXP10 0x000001A0 // USB Maximum Transmit Data - // Endpoint 10 -#define USB_O_TXCSRL10 0x000001A2 // USB Transmit Control and Status - // Endpoint 10 Low -#define USB_O_TXCSRH10 0x000001A3 // USB Transmit Control and Status - // Endpoint 10 High -#define USB_O_RXMAXP10 0x000001A4 // USB Maximum Receive Data - // Endpoint 10 -#define USB_O_RXCSRL10 0x000001A6 // USB Receive Control and Status - // Endpoint 10 Low -#define USB_O_RXCSRH10 0x000001A7 // USB Receive Control and Status - // Endpoint 10 High -#define USB_O_RXCOUNT10 0x000001A8 // USB Receive Byte Count Endpoint - // 10 -#define USB_O_TXTYPE10 0x000001AA // USB Host Transmit Configure Type - // Endpoint 10 -#define USB_O_TXINTERVAL10 0x000001AB // USB Host Transmit Interval - // Endpoint 10 -#define USB_O_RXTYPE10 0x000001AC // USB Host Configure Receive Type - // Endpoint 10 -#define USB_O_RXINTERVAL10 0x000001AD // USB Host Receive Polling - // Interval Endpoint 10 -#define USB_O_TXMAXP11 0x000001B0 // USB Maximum Transmit Data - // Endpoint 11 -#define USB_O_TXCSRL11 0x000001B2 // USB Transmit Control and Status - // Endpoint 11 Low -#define USB_O_TXCSRH11 0x000001B3 // USB Transmit Control and Status - // Endpoint 11 High -#define USB_O_RXMAXP11 0x000001B4 // USB Maximum Receive Data - // Endpoint 11 -#define USB_O_RXCSRL11 0x000001B6 // USB Receive Control and Status - // Endpoint 11 Low -#define USB_O_RXCSRH11 0x000001B7 // USB Receive Control and Status - // Endpoint 11 High -#define USB_O_RXCOUNT11 0x000001B8 // USB Receive Byte Count Endpoint - // 11 -#define USB_O_TXTYPE11 0x000001BA // USB Host Transmit Configure Type - // Endpoint 11 -#define USB_O_TXINTERVAL11 0x000001BB // USB Host Transmit Interval - // Endpoint 11 -#define USB_O_RXTYPE11 0x000001BC // USB Host Configure Receive Type - // Endpoint 11 -#define USB_O_RXINTERVAL11 0x000001BD // USB Host Receive Polling - // Interval Endpoint 11 -#define USB_O_TXMAXP12 0x000001C0 // USB Maximum Transmit Data - // Endpoint 12 -#define USB_O_TXCSRL12 0x000001C2 // USB Transmit Control and Status - // Endpoint 12 Low -#define USB_O_TXCSRH12 0x000001C3 // USB Transmit Control and Status - // Endpoint 12 High -#define USB_O_RXMAXP12 0x000001C4 // USB Maximum Receive Data - // Endpoint 12 -#define USB_O_RXCSRL12 0x000001C6 // USB Receive Control and Status - // Endpoint 12 Low -#define USB_O_RXCSRH12 0x000001C7 // USB Receive Control and Status - // Endpoint 12 High -#define USB_O_RXCOUNT12 0x000001C8 // USB Receive Byte Count Endpoint - // 12 -#define USB_O_TXTYPE12 0x000001CA // USB Host Transmit Configure Type - // Endpoint 12 -#define USB_O_TXINTERVAL12 0x000001CB // USB Host Transmit Interval - // Endpoint 12 -#define USB_O_RXTYPE12 0x000001CC // USB Host Configure Receive Type - // Endpoint 12 -#define USB_O_RXINTERVAL12 0x000001CD // USB Host Receive Polling - // Interval Endpoint 12 -#define USB_O_TXMAXP13 0x000001D0 // USB Maximum Transmit Data - // Endpoint 13 -#define USB_O_TXCSRL13 0x000001D2 // USB Transmit Control and Status - // Endpoint 13 Low -#define USB_O_TXCSRH13 0x000001D3 // USB Transmit Control and Status - // Endpoint 13 High -#define USB_O_RXMAXP13 0x000001D4 // USB Maximum Receive Data - // Endpoint 13 -#define USB_O_RXCSRL13 0x000001D6 // USB Receive Control and Status - // Endpoint 13 Low -#define USB_O_RXCSRH13 0x000001D7 // USB Receive Control and Status - // Endpoint 13 High -#define USB_O_RXCOUNT13 0x000001D8 // USB Receive Byte Count Endpoint - // 13 -#define USB_O_TXTYPE13 0x000001DA // USB Host Transmit Configure Type - // Endpoint 13 -#define USB_O_TXINTERVAL13 0x000001DB // USB Host Transmit Interval - // Endpoint 13 -#define USB_O_RXTYPE13 0x000001DC // USB Host Configure Receive Type - // Endpoint 13 -#define USB_O_RXINTERVAL13 0x000001DD // USB Host Receive Polling - // Interval Endpoint 13 -#define USB_O_TXMAXP14 0x000001E0 // USB Maximum Transmit Data - // Endpoint 14 -#define USB_O_TXCSRL14 0x000001E2 // USB Transmit Control and Status - // Endpoint 14 Low -#define USB_O_TXCSRH14 0x000001E3 // USB Transmit Control and Status - // Endpoint 14 High -#define USB_O_RXMAXP14 0x000001E4 // USB Maximum Receive Data - // Endpoint 14 -#define USB_O_RXCSRL14 0x000001E6 // USB Receive Control and Status - // Endpoint 14 Low -#define USB_O_RXCSRH14 0x000001E7 // USB Receive Control and Status - // Endpoint 14 High -#define USB_O_RXCOUNT14 0x000001E8 // USB Receive Byte Count Endpoint - // 14 -#define USB_O_TXTYPE14 0x000001EA // USB Host Transmit Configure Type - // Endpoint 14 -#define USB_O_TXINTERVAL14 0x000001EB // USB Host Transmit Interval - // Endpoint 14 -#define USB_O_RXTYPE14 0x000001EC // USB Host Configure Receive Type - // Endpoint 14 -#define USB_O_RXINTERVAL14 0x000001ED // USB Host Receive Polling - // Interval Endpoint 14 -#define USB_O_TXMAXP15 0x000001F0 // USB Maximum Transmit Data - // Endpoint 15 -#define USB_O_TXCSRL15 0x000001F2 // USB Transmit Control and Status - // Endpoint 15 Low -#define USB_O_TXCSRH15 0x000001F3 // USB Transmit Control and Status - // Endpoint 15 High -#define USB_O_RXMAXP15 0x000001F4 // USB Maximum Receive Data - // Endpoint 15 -#define USB_O_RXCSRL15 0x000001F6 // USB Receive Control and Status - // Endpoint 15 Low -#define USB_O_RXCSRH15 0x000001F7 // USB Receive Control and Status - // Endpoint 15 High -#define USB_O_RXCOUNT15 0x000001F8 // USB Receive Byte Count Endpoint - // 15 -#define USB_O_TXTYPE15 0x000001FA // USB Host Transmit Configure Type - // Endpoint 15 -#define USB_O_TXINTERVAL15 0x000001FB // USB Host Transmit Interval - // Endpoint 15 -#define USB_O_RXTYPE15 0x000001FC // USB Host Configure Receive Type - // Endpoint 15 -#define USB_O_RXINTERVAL15 0x000001FD // USB Host Receive Polling - // Interval Endpoint 15 -#define USB_O_RQPKTCOUNT1 0x00000304 // USB Request Packet Count in - // Block Transfer Endpoint 1 -#define USB_O_RQPKTCOUNT2 0x00000308 // USB Request Packet Count in - // Block Transfer Endpoint 2 -#define USB_O_RQPKTCOUNT3 0x0000030C // USB Request Packet Count in - // Block Transfer Endpoint 3 -#define USB_O_RQPKTCOUNT4 0x00000310 // USB Request Packet Count in - // Block Transfer Endpoint 4 -#define USB_O_RQPKTCOUNT5 0x00000314 // USB Request Packet Count in - // Block Transfer Endpoint 5 -#define USB_O_RQPKTCOUNT6 0x00000318 // USB Request Packet Count in - // Block Transfer Endpoint 6 -#define USB_O_RQPKTCOUNT7 0x0000031C // USB Request Packet Count in - // Block Transfer Endpoint 7 -#define USB_O_RQPKTCOUNT8 0x00000320 // USB Request Packet Count in - // Block Transfer Endpoint 8 -#define USB_O_RQPKTCOUNT9 0x00000324 // USB Request Packet Count in - // Block Transfer Endpoint 9 -#define USB_O_RQPKTCOUNT10 0x00000328 // USB Request Packet Count in - // Block Transfer Endpoint 10 -#define USB_O_RQPKTCOUNT11 0x0000032C // USB Request Packet Count in - // Block Transfer Endpoint 11 -#define USB_O_RQPKTCOUNT12 0x00000330 // USB Request Packet Count in - // Block Transfer Endpoint 12 -#define USB_O_RQPKTCOUNT13 0x00000334 // USB Request Packet Count in - // Block Transfer Endpoint 13 -#define USB_O_RQPKTCOUNT14 0x00000338 // USB Request Packet Count in - // Block Transfer Endpoint 14 -#define USB_O_RQPKTCOUNT15 0x0000033C // USB Request Packet Count in - // Block Transfer Endpoint 15 -#define USB_O_RXDPKTBUFDIS 0x00000340 // USB Receive Double Packet Buffer - // Disable -#define USB_O_TXDPKTBUFDIS 0x00000342 // USB Transmit Double Packet - // Buffer Disable -#define USB_O_EPC 0x00000400 // USB External Power Control -#define USB_O_EPCRIS 0x00000404 // USB External Power Control Raw - // Interrupt Status -#define USB_O_EPCIM 0x00000408 // USB External Power Control - // Interrupt Mask -#define USB_O_EPCISC 0x0000040C // USB External Power Control - // Interrupt Status and Clear -#define USB_O_DRRIS 0x00000410 // USB Device RESUME Raw Interrupt - // Status -#define USB_O_DRIM 0x00000414 // USB Device RESUME Interrupt Mask -#define USB_O_DRISC 0x00000418 // USB Device RESUME Interrupt - // Status and Clear -#define USB_O_GPCS 0x0000041C // USB General-Purpose Control and - // Status -#define USB_O_VDC 0x00000430 // USB VBUS Droop Control -#define USB_O_VDCRIS 0x00000434 // USB VBUS Droop Control Raw - // Interrupt Status -#define USB_O_VDCIM 0x00000438 // USB VBUS Droop Control Interrupt - // Mask -#define USB_O_VDCISC 0x0000043C // USB VBUS Droop Control Interrupt - // Status and Clear -#define USB_O_IDVRIS 0x00000444 // USB ID Valid Detect Raw - // Interrupt Status -#define USB_O_IDVIM 0x00000448 // USB ID Valid Detect Interrupt - // Mask -#define USB_O_IDVISC 0x0000044C // USB ID Valid Detect Interrupt - // Status and Clear -#define USB_O_DMASEL 0x00000450 // USB DMA Select -#define USB_O_PP 0x00000FC0 // USB Peripheral Properties - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FADDR register. -// -//***************************************************************************** -#define USB_FADDR_M 0x0000007F // Function Address -#define USB_FADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_POWER register. -// -//***************************************************************************** -#define USB_POWER_ISOUP 0x00000080 // Isochronous Update -#define USB_POWER_SOFTCONN 0x00000040 // Soft Connect/Disconnect -#define USB_POWER_RESET 0x00000008 // RESET Signaling -#define USB_POWER_RESUME 0x00000004 // RESUME Signaling -#define USB_POWER_SUSPEND 0x00000002 // SUSPEND Mode -#define USB_POWER_PWRDNPHY 0x00000001 // Power Down PHY - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXIS register. -// -//***************************************************************************** -#define USB_TXIS_EP15 0x00008000 // TX Endpoint 15 Interrupt -#define USB_TXIS_EP14 0x00004000 // TX Endpoint 14 Interrupt -#define USB_TXIS_EP13 0x00002000 // TX Endpoint 13 Interrupt -#define USB_TXIS_EP12 0x00001000 // TX Endpoint 12 Interrupt -#define USB_TXIS_EP11 0x00000800 // TX Endpoint 11 Interrupt -#define USB_TXIS_EP10 0x00000400 // TX Endpoint 10 Interrupt -#define USB_TXIS_EP9 0x00000200 // TX Endpoint 9 Interrupt -#define USB_TXIS_EP8 0x00000100 // TX Endpoint 8 Interrupt -#define USB_TXIS_EP7 0x00000080 // TX Endpoint 7 Interrupt -#define USB_TXIS_EP6 0x00000040 // TX Endpoint 6 Interrupt -#define USB_TXIS_EP5 0x00000020 // TX Endpoint 5 Interrupt -#define USB_TXIS_EP4 0x00000010 // TX Endpoint 4 Interrupt -#define USB_TXIS_EP3 0x00000008 // TX Endpoint 3 Interrupt -#define USB_TXIS_EP2 0x00000004 // TX Endpoint 2 Interrupt -#define USB_TXIS_EP1 0x00000002 // TX Endpoint 1 Interrupt -#define USB_TXIS_EP0 0x00000001 // TX and RX Endpoint 0 Interrupt - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXIS register. -// -//***************************************************************************** -#define USB_RXIS_EP15 0x00008000 // RX Endpoint 15 Interrupt -#define USB_RXIS_EP14 0x00004000 // RX Endpoint 14 Interrupt -#define USB_RXIS_EP13 0x00002000 // RX Endpoint 13 Interrupt -#define USB_RXIS_EP12 0x00001000 // RX Endpoint 12 Interrupt -#define USB_RXIS_EP11 0x00000800 // RX Endpoint 11 Interrupt -#define USB_RXIS_EP10 0x00000400 // RX Endpoint 10 Interrupt -#define USB_RXIS_EP9 0x00000200 // RX Endpoint 9 Interrupt -#define USB_RXIS_EP8 0x00000100 // RX Endpoint 8 Interrupt -#define USB_RXIS_EP7 0x00000080 // RX Endpoint 7 Interrupt -#define USB_RXIS_EP6 0x00000040 // RX Endpoint 6 Interrupt -#define USB_RXIS_EP5 0x00000020 // RX Endpoint 5 Interrupt -#define USB_RXIS_EP4 0x00000010 // RX Endpoint 4 Interrupt -#define USB_RXIS_EP3 0x00000008 // RX Endpoint 3 Interrupt -#define USB_RXIS_EP2 0x00000004 // RX Endpoint 2 Interrupt -#define USB_RXIS_EP1 0x00000002 // RX Endpoint 1 Interrupt - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXIE register. -// -//***************************************************************************** -#define USB_TXIE_EP15 0x00008000 // TX Endpoint 15 Interrupt Enable -#define USB_TXIE_EP14 0x00004000 // TX Endpoint 14 Interrupt Enable -#define USB_TXIE_EP13 0x00002000 // TX Endpoint 13 Interrupt Enable -#define USB_TXIE_EP12 0x00001000 // TX Endpoint 12 Interrupt Enable -#define USB_TXIE_EP11 0x00000800 // TX Endpoint 11 Interrupt Enable -#define USB_TXIE_EP10 0x00000400 // TX Endpoint 10 Interrupt Enable -#define USB_TXIE_EP9 0x00000200 // TX Endpoint 9 Interrupt Enable -#define USB_TXIE_EP8 0x00000100 // TX Endpoint 8 Interrupt Enable -#define USB_TXIE_EP7 0x00000080 // TX Endpoint 7 Interrupt Enable -#define USB_TXIE_EP6 0x00000040 // TX Endpoint 6 Interrupt Enable -#define USB_TXIE_EP5 0x00000020 // TX Endpoint 5 Interrupt Enable -#define USB_TXIE_EP4 0x00000010 // TX Endpoint 4 Interrupt Enable -#define USB_TXIE_EP3 0x00000008 // TX Endpoint 3 Interrupt Enable -#define USB_TXIE_EP2 0x00000004 // TX Endpoint 2 Interrupt Enable -#define USB_TXIE_EP1 0x00000002 // TX Endpoint 1 Interrupt Enable -#define USB_TXIE_EP0 0x00000001 // TX and RX Endpoint 0 Interrupt - // Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXIE register. -// -//***************************************************************************** -#define USB_RXIE_EP15 0x00008000 // RX Endpoint 15 Interrupt Enable -#define USB_RXIE_EP14 0x00004000 // RX Endpoint 14 Interrupt Enable -#define USB_RXIE_EP13 0x00002000 // RX Endpoint 13 Interrupt Enable -#define USB_RXIE_EP12 0x00001000 // RX Endpoint 12 Interrupt Enable -#define USB_RXIE_EP11 0x00000800 // RX Endpoint 11 Interrupt Enable -#define USB_RXIE_EP10 0x00000400 // RX Endpoint 10 Interrupt Enable -#define USB_RXIE_EP9 0x00000200 // RX Endpoint 9 Interrupt Enable -#define USB_RXIE_EP8 0x00000100 // RX Endpoint 8 Interrupt Enable -#define USB_RXIE_EP7 0x00000080 // RX Endpoint 7 Interrupt Enable -#define USB_RXIE_EP6 0x00000040 // RX Endpoint 6 Interrupt Enable -#define USB_RXIE_EP5 0x00000020 // RX Endpoint 5 Interrupt Enable -#define USB_RXIE_EP4 0x00000010 // RX Endpoint 4 Interrupt Enable -#define USB_RXIE_EP3 0x00000008 // RX Endpoint 3 Interrupt Enable -#define USB_RXIE_EP2 0x00000004 // RX Endpoint 2 Interrupt Enable -#define USB_RXIE_EP1 0x00000002 // RX Endpoint 1 Interrupt Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_IS register. -// -//***************************************************************************** -#define USB_IS_VBUSERR 0x00000080 // VBUS Error -#define USB_IS_SESREQ 0x00000040 // SESSION REQUEST -#define USB_IS_DISCON 0x00000020 // Session Disconnect -#define USB_IS_CONN 0x00000010 // Session Connect -#define USB_IS_SOF 0x00000008 // Start of Frame -#define USB_IS_BABBLE 0x00000004 // Babble Detected -#define USB_IS_RESET 0x00000004 // RESET Signaling Detected -#define USB_IS_RESUME 0x00000002 // RESUME Signaling Detected -#define USB_IS_SUSPEND 0x00000001 // SUSPEND Signaling Detected - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_IE register. -// -//***************************************************************************** -#define USB_IE_VBUSERR 0x00000080 // Enable VBUS Error Interrupt -#define USB_IE_SESREQ 0x00000040 // Enable Session Request -#define USB_IE_DISCON 0x00000020 // Enable Disconnect Interrupt -#define USB_IE_CONN 0x00000010 // Enable Connect Interrupt -#define USB_IE_SOF 0x00000008 // Enable Start-of-Frame Interrupt -#define USB_IE_BABBLE 0x00000004 // Enable Babble Interrupt -#define USB_IE_RESET 0x00000004 // Enable RESET Interrupt -#define USB_IE_RESUME 0x00000002 // Enable RESUME Interrupt -#define USB_IE_SUSPND 0x00000001 // Enable SUSPEND Interrupt - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FRAME register. -// -//***************************************************************************** -#define USB_FRAME_M 0x000007FF // Frame Number -#define USB_FRAME_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_EPIDX register. -// -//***************************************************************************** -#define USB_EPIDX_EPIDX_M 0x0000000F // Endpoint Index -#define USB_EPIDX_EPIDX_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TEST register. -// -//***************************************************************************** -#define USB_TEST_FORCEH 0x00000080 // Force Host Mode -#define USB_TEST_FIFOACC 0x00000040 // FIFO Access -#define USB_TEST_FORCEFS 0x00000020 // Force Full-Speed Mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO0 register. -// -//***************************************************************************** -#define USB_FIFO0_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO0_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO1 register. -// -//***************************************************************************** -#define USB_FIFO1_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO1_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO2 register. -// -//***************************************************************************** -#define USB_FIFO2_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO2_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO3 register. -// -//***************************************************************************** -#define USB_FIFO3_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO3_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO4 register. -// -//***************************************************************************** -#define USB_FIFO4_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO4_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO5 register. -// -//***************************************************************************** -#define USB_FIFO5_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO5_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO6 register. -// -//***************************************************************************** -#define USB_FIFO6_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO6_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO7 register. -// -//***************************************************************************** -#define USB_FIFO7_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO7_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO8 register. -// -//***************************************************************************** -#define USB_FIFO8_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO8_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO9 register. -// -//***************************************************************************** -#define USB_FIFO9_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO9_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO10 register. -// -//***************************************************************************** -#define USB_FIFO10_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO10_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO11 register. -// -//***************************************************************************** -#define USB_FIFO11_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO11_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO12 register. -// -//***************************************************************************** -#define USB_FIFO12_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO12_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO13 register. -// -//***************************************************************************** -#define USB_FIFO13_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO13_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO14 register. -// -//***************************************************************************** -#define USB_FIFO14_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO14_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FIFO15 register. -// -//***************************************************************************** -#define USB_FIFO15_EPDATA_M 0xFFFFFFFF // Endpoint Data -#define USB_FIFO15_EPDATA_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_DEVCTL register. -// -//***************************************************************************** -#define USB_DEVCTL_DEV 0x00000080 // Device Mode -#define USB_DEVCTL_FSDEV 0x00000040 // Full-Speed Device Detected -#define USB_DEVCTL_LSDEV 0x00000020 // Low-Speed Device Detected -#define USB_DEVCTL_VBUS_M 0x00000018 // VBUS Level -#define USB_DEVCTL_VBUS_NONE 0x00000000 // Below SessionEnd -#define USB_DEVCTL_VBUS_SEND 0x00000008 // Above SessionEnd, below AValid -#define USB_DEVCTL_VBUS_AVALID 0x00000010 // Above AValid, below VBUSValid -#define USB_DEVCTL_VBUS_VALID 0x00000018 // Above VBUSValid -#define USB_DEVCTL_HOST 0x00000004 // Host Mode -#define USB_DEVCTL_HOSTREQ 0x00000002 // Host Request -#define USB_DEVCTL_SESSION 0x00000001 // Session Start/End - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFIFOSZ register. -// -//***************************************************************************** -#define USB_TXFIFOSZ_DPB 0x00000010 // Double Packet Buffer Support -#define USB_TXFIFOSZ_SIZE_M 0x0000000F // Max Packet Size -#define USB_TXFIFOSZ_SIZE_8 0x00000000 // 8 -#define USB_TXFIFOSZ_SIZE_16 0x00000001 // 16 -#define USB_TXFIFOSZ_SIZE_32 0x00000002 // 32 -#define USB_TXFIFOSZ_SIZE_64 0x00000003 // 64 -#define USB_TXFIFOSZ_SIZE_128 0x00000004 // 128 -#define USB_TXFIFOSZ_SIZE_256 0x00000005 // 256 -#define USB_TXFIFOSZ_SIZE_512 0x00000006 // 512 -#define USB_TXFIFOSZ_SIZE_1024 0x00000007 // 1024 -#define USB_TXFIFOSZ_SIZE_2048 0x00000008 // 2048 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFIFOSZ register. -// -//***************************************************************************** -#define USB_RXFIFOSZ_DPB 0x00000010 // Double Packet Buffer Support -#define USB_RXFIFOSZ_SIZE_M 0x0000000F // Max Packet Size -#define USB_RXFIFOSZ_SIZE_8 0x00000000 // 8 -#define USB_RXFIFOSZ_SIZE_16 0x00000001 // 16 -#define USB_RXFIFOSZ_SIZE_32 0x00000002 // 32 -#define USB_RXFIFOSZ_SIZE_64 0x00000003 // 64 -#define USB_RXFIFOSZ_SIZE_128 0x00000004 // 128 -#define USB_RXFIFOSZ_SIZE_256 0x00000005 // 256 -#define USB_RXFIFOSZ_SIZE_512 0x00000006 // 512 -#define USB_RXFIFOSZ_SIZE_1024 0x00000007 // 1024 -#define USB_RXFIFOSZ_SIZE_2048 0x00000008 // 2048 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFIFOADD -// register. -// -//***************************************************************************** -#define USB_TXFIFOADD_ADDR_M 0x000001FF // Transmit/Receive Start Address -#define USB_TXFIFOADD_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFIFOADD -// register. -// -//***************************************************************************** -#define USB_RXFIFOADD_ADDR_M 0x000001FF // Transmit/Receive Start Address -#define USB_RXFIFOADD_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_CONTIM register. -// -//***************************************************************************** -#define USB_CONTIM_WTCON_M 0x000000F0 // Connect Wait -#define USB_CONTIM_WTID_M 0x0000000F // Wait ID -#define USB_CONTIM_WTCON_S 4 -#define USB_CONTIM_WTID_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_VPLEN register. -// -//***************************************************************************** -#define USB_VPLEN_VPLEN_M 0x000000FF // VBUS Pulse Length -#define USB_VPLEN_VPLEN_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_FSEOF register. -// -//***************************************************************************** -#define USB_FSEOF_FSEOFG_M 0x000000FF // Full-Speed End-of-Frame Gap -#define USB_FSEOF_FSEOFG_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_LSEOF register. -// -//***************************************************************************** -#define USB_LSEOF_LSEOFG_M 0x000000FF // Low-Speed End-of-Frame Gap -#define USB_LSEOF_LSEOFG_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR0 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR0_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR0_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR0 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR0_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR0_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT0 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT0_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT0_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR1 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR1_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR1_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR1 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR1_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR1_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT1 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT1_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT1_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR1 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR1_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR1_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR1 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR1_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR1_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT1 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT1_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT1_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR2 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR2_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR2_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR2 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR2_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR2_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT2 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT2_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT2_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR2 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR2_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR2_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR2 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR2_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR2_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT2 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT2_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT2_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR3 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR3_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR3_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR3 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR3_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR3_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT3 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT3_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT3_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR3 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR3_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR3_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR3 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR3_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR3_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT3 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT3_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT3_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR4 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR4_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR4_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR4 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR4_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR4_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT4 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT4_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT4_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR4 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR4_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR4_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR4 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR4_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR4_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT4 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT4_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT4_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR5 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR5_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR5_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR5 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR5_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR5_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT5 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT5_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT5_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR5 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR5_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR5_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR5 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR5_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR5_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT5 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT5_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT5_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR6 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR6_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR6_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR6 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR6_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR6_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT6 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT6_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT6_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR6 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR6_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR6_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR6 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR6_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR6_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT6 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT6_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT6_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR7 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR7_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR7_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR7 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR7_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR7_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT7 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT7_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT7_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR7 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR7_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR7_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR7 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR7_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR7_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT7 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT7_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT7_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR8 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR8_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR8_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR8 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR8_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR8_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT8 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT8_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT8_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR8 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR8_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR8_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR8 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR8_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR8_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT8 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT8_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT8_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR9 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR9_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR9_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR9 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR9_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR9_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT9 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT9_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT9_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR9 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR9_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR9_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR9 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR9_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR9_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT9 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT9_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT9_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR10 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR10_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR10_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR10 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR10_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR10_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT10 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT10_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT10_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR10 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR10_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR10_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR10 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR10_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR10_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT10 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT10_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT10_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR11 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR11_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR11_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR11 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR11_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR11_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT11 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT11_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT11_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR11 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR11_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR11_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR11 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR11_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR11_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT11 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT11_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT11_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR12 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR12_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR12_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR12 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR12_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR12_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT12 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT12_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT12_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR12 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR12_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR12_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR12 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR12_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR12_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT12 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT12_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT12_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR13 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR13_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR13_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR13 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR13_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR13_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT13 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT13_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT13_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR13 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR13_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR13_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR13 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR13_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR13_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT13 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT13_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT13_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR14 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR14_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR14_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR14 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR14_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR14_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT14 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT14_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT14_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR14 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR14_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR14_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR14 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR14_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR14_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT14 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT14_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT14_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXFUNCADDR15 -// register. -// -//***************************************************************************** -#define USB_TXFUNCADDR15_ADDR_M 0x0000007F // Device Address -#define USB_TXFUNCADDR15_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBADDR15 -// register. -// -//***************************************************************************** -#define USB_TXHUBADDR15_ADDR_M 0x0000007F // Hub Address -#define USB_TXHUBADDR15_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXHUBPORT15 -// register. -// -//***************************************************************************** -#define USB_TXHUBPORT15_PORT_M 0x0000007F // Hub Port -#define USB_TXHUBPORT15_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXFUNCADDR15 -// register. -// -//***************************************************************************** -#define USB_RXFUNCADDR15_ADDR_M 0x0000007F // Device Address -#define USB_RXFUNCADDR15_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBADDR15 -// register. -// -//***************************************************************************** -#define USB_RXHUBADDR15_ADDR_M 0x0000007F // Hub Address -#define USB_RXHUBADDR15_ADDR_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXHUBPORT15 -// register. -// -//***************************************************************************** -#define USB_RXHUBPORT15_PORT_M 0x0000007F // Hub Port -#define USB_RXHUBPORT15_PORT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_CSRL0 register. -// -//***************************************************************************** -#define USB_CSRL0_NAKTO 0x00000080 // NAK Timeout -#define USB_CSRL0_SETENDC 0x00000080 // Setup End Clear -#define USB_CSRL0_STATUS 0x00000040 // STATUS Packet -#define USB_CSRL0_RXRDYC 0x00000040 // RXRDY Clear -#define USB_CSRL0_REQPKT 0x00000020 // Request Packet -#define USB_CSRL0_STALL 0x00000020 // Send Stall -#define USB_CSRL0_SETEND 0x00000010 // Setup End -#define USB_CSRL0_ERROR 0x00000010 // Error -#define USB_CSRL0_DATAEND 0x00000008 // Data End -#define USB_CSRL0_SETUP 0x00000008 // Setup Packet -#define USB_CSRL0_STALLED 0x00000004 // Endpoint Stalled -#define USB_CSRL0_TXRDY 0x00000002 // Transmit Packet Ready -#define USB_CSRL0_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_CSRH0 register. -// -//***************************************************************************** -#define USB_CSRH0_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_CSRH0_DT 0x00000002 // Data Toggle -#define USB_CSRH0_FLUSH 0x00000001 // Flush FIFO - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_COUNT0 register. -// -//***************************************************************************** -#define USB_COUNT0_COUNT_M 0x0000007F // FIFO Count -#define USB_COUNT0_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TYPE0 register. -// -//***************************************************************************** -#define USB_TYPE0_SPEED_M 0x000000C0 // Operating Speed -#define USB_TYPE0_SPEED_FULL 0x00000080 // Full -#define USB_TYPE0_SPEED_LOW 0x000000C0 // Low - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_NAKLMT register. -// -//***************************************************************************** -#define USB_NAKLMT_NAKLMT_M 0x0000001F // EP0 NAK Limit -#define USB_NAKLMT_NAKLMT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP1 register. -// -//***************************************************************************** -#define USB_TXMAXP1_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP1_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL1 register. -// -//***************************************************************************** -#define USB_TXCSRL1_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL1_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL1_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL1_STALL 0x00000010 // Send STALL -#define USB_TXCSRL1_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL1_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL1_ERROR 0x00000004 // Error -#define USB_TXCSRL1_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL1_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL1_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH1 register. -// -//***************************************************************************** -#define USB_TXCSRH1_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH1_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH1_MODE 0x00000020 // Mode -#define USB_TXCSRH1_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH1_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH1_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH1_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH1_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP1 register. -// -//***************************************************************************** -#define USB_RXMAXP1_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP1_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL1 register. -// -//***************************************************************************** -#define USB_RXCSRL1_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL1_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL1_STALL 0x00000020 // Send STALL -#define USB_RXCSRL1_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL1_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL1_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL1_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL1_OVER 0x00000004 // Overrun -#define USB_RXCSRL1_ERROR 0x00000004 // Error -#define USB_RXCSRL1_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL1_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH1 register. -// -//***************************************************************************** -#define USB_RXCSRH1_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH1_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH1_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH1_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH1_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH1_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH1_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH1_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH1_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT1 register. -// -//***************************************************************************** -#define USB_RXCOUNT1_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT1_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE1 register. -// -//***************************************************************************** -#define USB_TXTYPE1_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE1_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE1_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE1_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE1_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE1_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE1_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE1_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE1_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE1_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE1_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL1 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL1_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL1_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL1_TXPOLL_S \ - 0 -#define USB_TXINTERVAL1_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE1 register. -// -//***************************************************************************** -#define USB_RXTYPE1_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE1_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE1_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE1_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE1_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE1_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE1_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE1_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE1_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE1_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE1_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL1 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL1_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL1_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL1_TXPOLL_S \ - 0 -#define USB_RXINTERVAL1_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP2 register. -// -//***************************************************************************** -#define USB_TXMAXP2_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP2_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL2 register. -// -//***************************************************************************** -#define USB_TXCSRL2_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL2_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL2_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL2_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL2_STALL 0x00000010 // Send STALL -#define USB_TXCSRL2_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL2_ERROR 0x00000004 // Error -#define USB_TXCSRL2_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL2_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL2_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH2 register. -// -//***************************************************************************** -#define USB_TXCSRH2_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH2_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH2_MODE 0x00000020 // Mode -#define USB_TXCSRH2_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH2_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH2_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH2_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH2_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP2 register. -// -//***************************************************************************** -#define USB_RXMAXP2_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP2_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL2 register. -// -//***************************************************************************** -#define USB_RXCSRL2_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL2_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL2_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL2_STALL 0x00000020 // Send STALL -#define USB_RXCSRL2_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL2_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL2_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL2_ERROR 0x00000004 // Error -#define USB_RXCSRL2_OVER 0x00000004 // Overrun -#define USB_RXCSRL2_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL2_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH2 register. -// -//***************************************************************************** -#define USB_RXCSRH2_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH2_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH2_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH2_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH2_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH2_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH2_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH2_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH2_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT2 register. -// -//***************************************************************************** -#define USB_RXCOUNT2_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT2_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE2 register. -// -//***************************************************************************** -#define USB_TXTYPE2_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE2_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE2_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE2_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE2_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE2_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE2_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE2_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE2_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE2_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE2_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL2 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL2_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL2_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL2_NAKLMT_S \ - 0 -#define USB_TXINTERVAL2_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE2 register. -// -//***************************************************************************** -#define USB_RXTYPE2_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE2_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE2_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE2_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE2_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE2_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE2_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE2_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE2_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE2_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE2_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL2 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL2_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL2_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL2_TXPOLL_S \ - 0 -#define USB_RXINTERVAL2_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP3 register. -// -//***************************************************************************** -#define USB_TXMAXP3_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP3_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL3 register. -// -//***************************************************************************** -#define USB_TXCSRL3_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL3_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL3_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL3_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL3_STALL 0x00000010 // Send STALL -#define USB_TXCSRL3_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL3_ERROR 0x00000004 // Error -#define USB_TXCSRL3_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL3_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL3_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH3 register. -// -//***************************************************************************** -#define USB_TXCSRH3_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH3_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH3_MODE 0x00000020 // Mode -#define USB_TXCSRH3_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH3_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH3_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH3_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH3_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP3 register. -// -//***************************************************************************** -#define USB_RXMAXP3_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP3_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL3 register. -// -//***************************************************************************** -#define USB_RXCSRL3_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL3_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL3_STALL 0x00000020 // Send STALL -#define USB_RXCSRL3_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL3_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL3_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL3_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL3_ERROR 0x00000004 // Error -#define USB_RXCSRL3_OVER 0x00000004 // Overrun -#define USB_RXCSRL3_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL3_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH3 register. -// -//***************************************************************************** -#define USB_RXCSRH3_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH3_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH3_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH3_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH3_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH3_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH3_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH3_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH3_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT3 register. -// -//***************************************************************************** -#define USB_RXCOUNT3_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT3_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE3 register. -// -//***************************************************************************** -#define USB_TXTYPE3_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE3_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE3_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE3_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE3_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE3_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE3_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE3_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE3_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE3_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE3_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL3 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL3_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL3_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL3_TXPOLL_S \ - 0 -#define USB_TXINTERVAL3_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE3 register. -// -//***************************************************************************** -#define USB_RXTYPE3_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE3_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE3_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE3_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE3_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE3_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE3_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE3_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE3_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE3_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE3_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL3 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL3_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL3_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL3_TXPOLL_S \ - 0 -#define USB_RXINTERVAL3_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP4 register. -// -//***************************************************************************** -#define USB_TXMAXP4_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP4_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL4 register. -// -//***************************************************************************** -#define USB_TXCSRL4_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL4_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL4_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL4_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL4_STALL 0x00000010 // Send STALL -#define USB_TXCSRL4_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL4_ERROR 0x00000004 // Error -#define USB_TXCSRL4_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL4_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL4_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH4 register. -// -//***************************************************************************** -#define USB_TXCSRH4_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH4_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH4_MODE 0x00000020 // Mode -#define USB_TXCSRH4_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH4_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH4_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH4_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH4_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP4 register. -// -//***************************************************************************** -#define USB_RXMAXP4_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP4_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL4 register. -// -//***************************************************************************** -#define USB_RXCSRL4_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL4_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL4_STALL 0x00000020 // Send STALL -#define USB_RXCSRL4_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL4_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL4_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL4_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL4_OVER 0x00000004 // Overrun -#define USB_RXCSRL4_ERROR 0x00000004 // Error -#define USB_RXCSRL4_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL4_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH4 register. -// -//***************************************************************************** -#define USB_RXCSRH4_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH4_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH4_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH4_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH4_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH4_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH4_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH4_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH4_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT4 register. -// -//***************************************************************************** -#define USB_RXCOUNT4_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT4_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE4 register. -// -//***************************************************************************** -#define USB_TXTYPE4_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE4_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE4_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE4_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE4_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE4_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE4_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE4_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE4_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE4_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE4_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL4 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL4_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL4_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL4_NAKLMT_S \ - 0 -#define USB_TXINTERVAL4_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE4 register. -// -//***************************************************************************** -#define USB_RXTYPE4_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE4_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE4_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE4_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE4_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE4_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE4_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE4_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE4_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE4_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE4_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL4 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL4_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL4_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL4_NAKLMT_S \ - 0 -#define USB_RXINTERVAL4_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP5 register. -// -//***************************************************************************** -#define USB_TXMAXP5_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP5_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL5 register. -// -//***************************************************************************** -#define USB_TXCSRL5_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL5_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL5_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL5_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL5_STALL 0x00000010 // Send STALL -#define USB_TXCSRL5_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL5_ERROR 0x00000004 // Error -#define USB_TXCSRL5_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL5_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL5_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH5 register. -// -//***************************************************************************** -#define USB_TXCSRH5_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH5_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH5_MODE 0x00000020 // Mode -#define USB_TXCSRH5_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH5_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH5_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH5_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH5_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP5 register. -// -//***************************************************************************** -#define USB_RXMAXP5_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP5_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL5 register. -// -//***************************************************************************** -#define USB_RXCSRL5_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL5_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL5_STALL 0x00000020 // Send STALL -#define USB_RXCSRL5_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL5_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL5_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL5_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL5_ERROR 0x00000004 // Error -#define USB_RXCSRL5_OVER 0x00000004 // Overrun -#define USB_RXCSRL5_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL5_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH5 register. -// -//***************************************************************************** -#define USB_RXCSRH5_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH5_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH5_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH5_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH5_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH5_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH5_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH5_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH5_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT5 register. -// -//***************************************************************************** -#define USB_RXCOUNT5_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT5_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE5 register. -// -//***************************************************************************** -#define USB_TXTYPE5_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE5_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE5_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE5_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE5_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE5_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE5_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE5_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE5_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE5_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE5_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL5 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL5_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL5_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL5_NAKLMT_S \ - 0 -#define USB_TXINTERVAL5_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE5 register. -// -//***************************************************************************** -#define USB_RXTYPE5_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE5_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE5_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE5_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE5_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE5_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE5_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE5_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE5_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE5_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE5_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL5 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL5_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL5_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL5_TXPOLL_S \ - 0 -#define USB_RXINTERVAL5_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP6 register. -// -//***************************************************************************** -#define USB_TXMAXP6_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP6_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL6 register. -// -//***************************************************************************** -#define USB_TXCSRL6_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL6_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL6_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL6_STALL 0x00000010 // Send STALL -#define USB_TXCSRL6_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL6_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL6_ERROR 0x00000004 // Error -#define USB_TXCSRL6_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL6_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL6_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH6 register. -// -//***************************************************************************** -#define USB_TXCSRH6_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH6_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH6_MODE 0x00000020 // Mode -#define USB_TXCSRH6_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH6_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH6_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH6_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH6_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP6 register. -// -//***************************************************************************** -#define USB_RXMAXP6_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP6_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL6 register. -// -//***************************************************************************** -#define USB_RXCSRL6_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL6_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL6_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL6_STALL 0x00000020 // Send STALL -#define USB_RXCSRL6_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL6_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL6_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL6_ERROR 0x00000004 // Error -#define USB_RXCSRL6_OVER 0x00000004 // Overrun -#define USB_RXCSRL6_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL6_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH6 register. -// -//***************************************************************************** -#define USB_RXCSRH6_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH6_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH6_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH6_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH6_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH6_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH6_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH6_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH6_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT6 register. -// -//***************************************************************************** -#define USB_RXCOUNT6_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT6_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE6 register. -// -//***************************************************************************** -#define USB_TXTYPE6_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE6_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE6_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE6_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE6_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE6_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE6_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE6_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE6_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE6_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE6_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL6 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL6_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL6_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL6_TXPOLL_S \ - 0 -#define USB_TXINTERVAL6_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE6 register. -// -//***************************************************************************** -#define USB_RXTYPE6_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE6_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE6_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE6_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE6_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE6_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE6_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE6_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE6_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE6_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE6_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL6 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL6_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL6_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL6_NAKLMT_S \ - 0 -#define USB_RXINTERVAL6_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP7 register. -// -//***************************************************************************** -#define USB_TXMAXP7_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP7_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL7 register. -// -//***************************************************************************** -#define USB_TXCSRL7_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL7_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL7_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL7_STALL 0x00000010 // Send STALL -#define USB_TXCSRL7_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL7_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL7_ERROR 0x00000004 // Error -#define USB_TXCSRL7_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL7_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL7_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH7 register. -// -//***************************************************************************** -#define USB_TXCSRH7_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH7_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH7_MODE 0x00000020 // Mode -#define USB_TXCSRH7_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH7_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH7_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH7_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH7_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP7 register. -// -//***************************************************************************** -#define USB_RXMAXP7_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP7_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL7 register. -// -//***************************************************************************** -#define USB_RXCSRL7_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL7_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL7_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL7_STALL 0x00000020 // Send STALL -#define USB_RXCSRL7_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL7_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL7_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL7_ERROR 0x00000004 // Error -#define USB_RXCSRL7_OVER 0x00000004 // Overrun -#define USB_RXCSRL7_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL7_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH7 register. -// -//***************************************************************************** -#define USB_RXCSRH7_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH7_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH7_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH7_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH7_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH7_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH7_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH7_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH7_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT7 register. -// -//***************************************************************************** -#define USB_RXCOUNT7_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT7_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE7 register. -// -//***************************************************************************** -#define USB_TXTYPE7_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE7_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE7_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE7_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE7_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE7_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE7_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE7_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE7_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE7_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE7_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL7 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL7_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL7_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL7_NAKLMT_S \ - 0 -#define USB_TXINTERVAL7_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE7 register. -// -//***************************************************************************** -#define USB_RXTYPE7_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE7_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE7_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE7_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE7_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE7_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE7_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE7_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE7_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE7_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE7_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL7 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL7_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL7_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL7_NAKLMT_S \ - 0 -#define USB_RXINTERVAL7_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP8 register. -// -//***************************************************************************** -#define USB_TXMAXP8_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP8_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL8 register. -// -//***************************************************************************** -#define USB_TXCSRL8_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL8_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL8_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL8_STALL 0x00000010 // Send STALL -#define USB_TXCSRL8_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL8_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL8_ERROR 0x00000004 // Error -#define USB_TXCSRL8_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL8_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL8_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH8 register. -// -//***************************************************************************** -#define USB_TXCSRH8_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH8_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH8_MODE 0x00000020 // Mode -#define USB_TXCSRH8_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH8_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH8_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH8_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH8_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP8 register. -// -//***************************************************************************** -#define USB_RXMAXP8_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP8_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL8 register. -// -//***************************************************************************** -#define USB_RXCSRL8_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL8_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL8_STALL 0x00000020 // Send STALL -#define USB_RXCSRL8_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL8_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL8_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL8_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL8_OVER 0x00000004 // Overrun -#define USB_RXCSRL8_ERROR 0x00000004 // Error -#define USB_RXCSRL8_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL8_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH8 register. -// -//***************************************************************************** -#define USB_RXCSRH8_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH8_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH8_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH8_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH8_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH8_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH8_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH8_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH8_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT8 register. -// -//***************************************************************************** -#define USB_RXCOUNT8_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT8_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE8 register. -// -//***************************************************************************** -#define USB_TXTYPE8_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE8_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE8_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE8_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE8_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE8_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE8_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE8_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE8_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE8_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE8_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL8 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL8_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL8_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL8_NAKLMT_S \ - 0 -#define USB_TXINTERVAL8_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE8 register. -// -//***************************************************************************** -#define USB_RXTYPE8_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE8_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE8_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE8_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE8_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE8_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE8_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE8_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE8_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE8_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE8_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL8 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL8_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL8_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL8_NAKLMT_S \ - 0 -#define USB_RXINTERVAL8_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP9 register. -// -//***************************************************************************** -#define USB_TXMAXP9_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP9_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL9 register. -// -//***************************************************************************** -#define USB_TXCSRL9_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL9_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL9_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL9_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL9_STALL 0x00000010 // Send STALL -#define USB_TXCSRL9_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL9_ERROR 0x00000004 // Error -#define USB_TXCSRL9_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL9_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL9_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH9 register. -// -//***************************************************************************** -#define USB_TXCSRH9_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH9_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH9_MODE 0x00000020 // Mode -#define USB_TXCSRH9_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH9_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH9_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH9_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH9_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP9 register. -// -//***************************************************************************** -#define USB_RXMAXP9_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP9_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL9 register. -// -//***************************************************************************** -#define USB_RXCSRL9_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL9_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL9_STALL 0x00000020 // Send STALL -#define USB_RXCSRL9_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL9_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL9_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL9_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL9_ERROR 0x00000004 // Error -#define USB_RXCSRL9_OVER 0x00000004 // Overrun -#define USB_RXCSRL9_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL9_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH9 register. -// -//***************************************************************************** -#define USB_RXCSRH9_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH9_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH9_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH9_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH9_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH9_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH9_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH9_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH9_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT9 register. -// -//***************************************************************************** -#define USB_RXCOUNT9_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT9_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE9 register. -// -//***************************************************************************** -#define USB_TXTYPE9_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE9_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE9_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE9_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE9_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE9_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE9_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE9_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE9_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE9_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE9_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL9 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL9_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL9_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL9_TXPOLL_S \ - 0 -#define USB_TXINTERVAL9_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE9 register. -// -//***************************************************************************** -#define USB_RXTYPE9_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE9_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE9_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE9_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE9_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE9_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE9_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE9_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE9_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE9_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE9_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL9 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL9_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL9_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL9_NAKLMT_S \ - 0 -#define USB_RXINTERVAL9_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP10 register. -// -//***************************************************************************** -#define USB_TXMAXP10_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP10_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL10 register. -// -//***************************************************************************** -#define USB_TXCSRL10_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL10_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL10_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL10_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL10_STALL 0x00000010 // Send STALL -#define USB_TXCSRL10_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL10_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL10_ERROR 0x00000004 // Error -#define USB_TXCSRL10_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL10_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH10 register. -// -//***************************************************************************** -#define USB_TXCSRH10_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH10_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH10_MODE 0x00000020 // Mode -#define USB_TXCSRH10_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH10_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH10_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH10_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH10_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP10 register. -// -//***************************************************************************** -#define USB_RXMAXP10_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP10_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL10 register. -// -//***************************************************************************** -#define USB_RXCSRL10_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL10_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL10_STALL 0x00000020 // Send STALL -#define USB_RXCSRL10_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL10_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL10_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL10_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL10_OVER 0x00000004 // Overrun -#define USB_RXCSRL10_ERROR 0x00000004 // Error -#define USB_RXCSRL10_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL10_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH10 register. -// -//***************************************************************************** -#define USB_RXCSRH10_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH10_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH10_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH10_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH10_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH10_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH10_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH10_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH10_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT10 -// register. -// -//***************************************************************************** -#define USB_RXCOUNT10_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT10_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE10 register. -// -//***************************************************************************** -#define USB_TXTYPE10_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE10_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE10_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE10_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE10_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE10_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE10_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE10_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE10_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE10_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE10_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL10 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL10_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL10_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL10_TXPOLL_S \ - 0 -#define USB_TXINTERVAL10_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE10 register. -// -//***************************************************************************** -#define USB_RXTYPE10_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE10_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE10_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE10_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE10_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE10_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE10_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE10_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE10_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE10_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE10_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL10 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL10_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL10_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL10_TXPOLL_S \ - 0 -#define USB_RXINTERVAL10_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP11 register. -// -//***************************************************************************** -#define USB_TXMAXP11_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP11_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL11 register. -// -//***************************************************************************** -#define USB_TXCSRL11_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL11_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL11_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL11_STALL 0x00000010 // Send STALL -#define USB_TXCSRL11_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL11_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL11_ERROR 0x00000004 // Error -#define USB_TXCSRL11_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL11_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL11_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH11 register. -// -//***************************************************************************** -#define USB_TXCSRH11_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH11_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH11_MODE 0x00000020 // Mode -#define USB_TXCSRH11_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH11_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH11_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH11_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH11_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP11 register. -// -//***************************************************************************** -#define USB_RXMAXP11_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP11_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL11 register. -// -//***************************************************************************** -#define USB_RXCSRL11_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL11_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL11_STALL 0x00000020 // Send STALL -#define USB_RXCSRL11_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL11_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL11_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL11_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL11_OVER 0x00000004 // Overrun -#define USB_RXCSRL11_ERROR 0x00000004 // Error -#define USB_RXCSRL11_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL11_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH11 register. -// -//***************************************************************************** -#define USB_RXCSRH11_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH11_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH11_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH11_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH11_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH11_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH11_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH11_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH11_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT11 -// register. -// -//***************************************************************************** -#define USB_RXCOUNT11_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT11_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE11 register. -// -//***************************************************************************** -#define USB_TXTYPE11_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE11_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE11_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE11_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE11_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE11_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE11_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE11_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE11_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE11_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE11_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL11 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL11_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL11_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL11_NAKLMT_S \ - 0 -#define USB_TXINTERVAL11_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE11 register. -// -//***************************************************************************** -#define USB_RXTYPE11_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE11_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE11_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE11_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE11_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE11_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE11_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE11_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE11_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE11_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE11_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL11 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL11_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL11_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL11_TXPOLL_S \ - 0 -#define USB_RXINTERVAL11_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP12 register. -// -//***************************************************************************** -#define USB_TXMAXP12_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP12_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL12 register. -// -//***************************************************************************** -#define USB_TXCSRL12_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL12_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL12_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL12_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL12_STALL 0x00000010 // Send STALL -#define USB_TXCSRL12_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL12_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL12_ERROR 0x00000004 // Error -#define USB_TXCSRL12_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL12_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH12 register. -// -//***************************************************************************** -#define USB_TXCSRH12_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH12_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH12_MODE 0x00000020 // Mode -#define USB_TXCSRH12_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH12_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH12_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH12_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH12_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP12 register. -// -//***************************************************************************** -#define USB_RXMAXP12_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP12_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL12 register. -// -//***************************************************************************** -#define USB_RXCSRL12_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL12_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL12_STALL 0x00000020 // Send STALL -#define USB_RXCSRL12_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL12_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL12_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL12_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL12_ERROR 0x00000004 // Error -#define USB_RXCSRL12_OVER 0x00000004 // Overrun -#define USB_RXCSRL12_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL12_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH12 register. -// -//***************************************************************************** -#define USB_RXCSRH12_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH12_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH12_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH12_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH12_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH12_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH12_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH12_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH12_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT12 -// register. -// -//***************************************************************************** -#define USB_RXCOUNT12_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT12_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE12 register. -// -//***************************************************************************** -#define USB_TXTYPE12_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE12_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE12_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE12_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE12_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE12_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE12_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE12_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE12_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE12_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE12_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL12 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL12_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL12_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL12_TXPOLL_S \ - 0 -#define USB_TXINTERVAL12_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE12 register. -// -//***************************************************************************** -#define USB_RXTYPE12_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE12_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE12_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE12_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE12_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE12_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE12_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE12_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE12_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE12_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE12_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL12 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL12_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL12_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL12_NAKLMT_S \ - 0 -#define USB_RXINTERVAL12_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP13 register. -// -//***************************************************************************** -#define USB_TXMAXP13_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP13_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL13 register. -// -//***************************************************************************** -#define USB_TXCSRL13_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL13_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL13_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL13_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL13_STALL 0x00000010 // Send STALL -#define USB_TXCSRL13_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL13_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL13_ERROR 0x00000004 // Error -#define USB_TXCSRL13_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL13_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH13 register. -// -//***************************************************************************** -#define USB_TXCSRH13_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH13_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH13_MODE 0x00000020 // Mode -#define USB_TXCSRH13_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH13_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH13_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH13_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH13_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP13 register. -// -//***************************************************************************** -#define USB_RXMAXP13_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP13_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL13 register. -// -//***************************************************************************** -#define USB_RXCSRL13_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL13_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL13_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL13_STALL 0x00000020 // Send STALL -#define USB_RXCSRL13_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL13_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL13_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL13_OVER 0x00000004 // Overrun -#define USB_RXCSRL13_ERROR 0x00000004 // Error -#define USB_RXCSRL13_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL13_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH13 register. -// -//***************************************************************************** -#define USB_RXCSRH13_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH13_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH13_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH13_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH13_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH13_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH13_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH13_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH13_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT13 -// register. -// -//***************************************************************************** -#define USB_RXCOUNT13_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT13_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE13 register. -// -//***************************************************************************** -#define USB_TXTYPE13_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE13_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE13_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE13_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE13_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE13_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE13_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE13_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE13_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE13_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE13_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL13 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL13_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL13_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL13_TXPOLL_S \ - 0 -#define USB_TXINTERVAL13_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE13 register. -// -//***************************************************************************** -#define USB_RXTYPE13_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE13_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE13_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE13_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE13_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE13_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE13_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE13_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE13_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE13_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE13_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL13 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL13_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL13_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL13_TXPOLL_S \ - 0 -#define USB_RXINTERVAL13_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP14 register. -// -//***************************************************************************** -#define USB_TXMAXP14_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP14_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL14 register. -// -//***************************************************************************** -#define USB_TXCSRL14_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL14_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL14_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL14_STALL 0x00000010 // Send STALL -#define USB_TXCSRL14_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL14_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL14_ERROR 0x00000004 // Error -#define USB_TXCSRL14_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL14_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL14_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH14 register. -// -//***************************************************************************** -#define USB_TXCSRH14_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH14_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH14_MODE 0x00000020 // Mode -#define USB_TXCSRH14_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH14_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH14_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH14_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH14_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP14 register. -// -//***************************************************************************** -#define USB_RXMAXP14_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP14_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL14 register. -// -//***************************************************************************** -#define USB_RXCSRL14_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL14_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL14_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL14_STALL 0x00000020 // Send STALL -#define USB_RXCSRL14_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL14_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL14_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL14_OVER 0x00000004 // Overrun -#define USB_RXCSRL14_ERROR 0x00000004 // Error -#define USB_RXCSRL14_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL14_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH14 register. -// -//***************************************************************************** -#define USB_RXCSRH14_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH14_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH14_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH14_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH14_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH14_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH14_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH14_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH14_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT14 -// register. -// -//***************************************************************************** -#define USB_RXCOUNT14_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT14_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE14 register. -// -//***************************************************************************** -#define USB_TXTYPE14_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE14_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE14_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE14_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE14_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE14_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE14_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE14_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE14_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE14_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE14_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL14 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL14_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL14_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL14_TXPOLL_S \ - 0 -#define USB_TXINTERVAL14_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE14 register. -// -//***************************************************************************** -#define USB_RXTYPE14_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE14_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE14_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE14_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE14_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE14_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE14_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE14_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE14_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE14_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE14_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL14 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL14_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL14_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL14_TXPOLL_S \ - 0 -#define USB_RXINTERVAL14_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXMAXP15 register. -// -//***************************************************************************** -#define USB_TXMAXP15_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_TXMAXP15_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRL15 register. -// -//***************************************************************************** -#define USB_TXCSRL15_NAKTO 0x00000080 // NAK Timeout -#define USB_TXCSRL15_CLRDT 0x00000040 // Clear Data Toggle -#define USB_TXCSRL15_STALLED 0x00000020 // Endpoint Stalled -#define USB_TXCSRL15_SETUP 0x00000010 // Setup Packet -#define USB_TXCSRL15_STALL 0x00000010 // Send STALL -#define USB_TXCSRL15_FLUSH 0x00000008 // Flush FIFO -#define USB_TXCSRL15_UNDRN 0x00000004 // Underrun -#define USB_TXCSRL15_ERROR 0x00000004 // Error -#define USB_TXCSRL15_FIFONE 0x00000002 // FIFO Not Empty -#define USB_TXCSRL15_TXRDY 0x00000001 // Transmit Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXCSRH15 register. -// -//***************************************************************************** -#define USB_TXCSRH15_AUTOSET 0x00000080 // Auto Set -#define USB_TXCSRH15_ISO 0x00000040 // Isochronous Transfers -#define USB_TXCSRH15_MODE 0x00000020 // Mode -#define USB_TXCSRH15_DMAEN 0x00000010 // DMA Request Enable -#define USB_TXCSRH15_FDT 0x00000008 // Force Data Toggle -#define USB_TXCSRH15_DMAMOD 0x00000004 // DMA Request Mode -#define USB_TXCSRH15_DTWE 0x00000002 // Data Toggle Write Enable -#define USB_TXCSRH15_DT 0x00000001 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXMAXP15 register. -// -//***************************************************************************** -#define USB_RXMAXP15_MAXLOAD_M 0x000007FF // Maximum Payload -#define USB_RXMAXP15_MAXLOAD_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRL15 register. -// -//***************************************************************************** -#define USB_RXCSRL15_CLRDT 0x00000080 // Clear Data Toggle -#define USB_RXCSRL15_STALLED 0x00000040 // Endpoint Stalled -#define USB_RXCSRL15_STALL 0x00000020 // Send STALL -#define USB_RXCSRL15_REQPKT 0x00000020 // Request Packet -#define USB_RXCSRL15_FLUSH 0x00000010 // Flush FIFO -#define USB_RXCSRL15_DATAERR 0x00000008 // Data Error -#define USB_RXCSRL15_NAKTO 0x00000008 // NAK Timeout -#define USB_RXCSRL15_ERROR 0x00000004 // Error -#define USB_RXCSRL15_OVER 0x00000004 // Overrun -#define USB_RXCSRL15_FULL 0x00000002 // FIFO Full -#define USB_RXCSRL15_RXRDY 0x00000001 // Receive Packet Ready - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCSRH15 register. -// -//***************************************************************************** -#define USB_RXCSRH15_AUTOCL 0x00000080 // Auto Clear -#define USB_RXCSRH15_AUTORQ 0x00000040 // Auto Request -#define USB_RXCSRH15_ISO 0x00000040 // Isochronous Transfers -#define USB_RXCSRH15_DMAEN 0x00000020 // DMA Request Enable -#define USB_RXCSRH15_PIDERR 0x00000010 // PID Error -#define USB_RXCSRH15_DISNYET 0x00000010 // Disable NYET -#define USB_RXCSRH15_DMAMOD 0x00000008 // DMA Request Mode -#define USB_RXCSRH15_DTWE 0x00000004 // Data Toggle Write Enable -#define USB_RXCSRH15_DT 0x00000002 // Data Toggle - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXCOUNT15 -// register. -// -//***************************************************************************** -#define USB_RXCOUNT15_COUNT_M 0x00001FFF // Receive Packet Count -#define USB_RXCOUNT15_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXTYPE15 register. -// -//***************************************************************************** -#define USB_TXTYPE15_SPEED_M 0x000000C0 // Operating Speed -#define USB_TXTYPE15_SPEED_DFLT 0x00000000 // Default -#define USB_TXTYPE15_SPEED_FULL 0x00000080 // Full -#define USB_TXTYPE15_SPEED_LOW 0x000000C0 // Low -#define USB_TXTYPE15_PROTO_M 0x00000030 // Protocol -#define USB_TXTYPE15_PROTO_CTRL 0x00000000 // Control -#define USB_TXTYPE15_PROTO_ISOC 0x00000010 // Isochronous -#define USB_TXTYPE15_PROTO_BULK 0x00000020 // Bulk -#define USB_TXTYPE15_PROTO_INT 0x00000030 // Interrupt -#define USB_TXTYPE15_TEP_M 0x0000000F // Target Endpoint Number -#define USB_TXTYPE15_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXINTERVAL15 -// register. -// -//***************************************************************************** -#define USB_TXINTERVAL15_TXPOLL_M \ - 0x000000FF // TX Polling -#define USB_TXINTERVAL15_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_TXINTERVAL15_NAKLMT_S \ - 0 -#define USB_TXINTERVAL15_TXPOLL_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXTYPE15 register. -// -//***************************************************************************** -#define USB_RXTYPE15_SPEED_M 0x000000C0 // Operating Speed -#define USB_RXTYPE15_SPEED_DFLT 0x00000000 // Default -#define USB_RXTYPE15_SPEED_FULL 0x00000080 // Full -#define USB_RXTYPE15_SPEED_LOW 0x000000C0 // Low -#define USB_RXTYPE15_PROTO_M 0x00000030 // Protocol -#define USB_RXTYPE15_PROTO_CTRL 0x00000000 // Control -#define USB_RXTYPE15_PROTO_ISOC 0x00000010 // Isochronous -#define USB_RXTYPE15_PROTO_BULK 0x00000020 // Bulk -#define USB_RXTYPE15_PROTO_INT 0x00000030 // Interrupt -#define USB_RXTYPE15_TEP_M 0x0000000F // Target Endpoint Number -#define USB_RXTYPE15_TEP_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXINTERVAL15 -// register. -// -//***************************************************************************** -#define USB_RXINTERVAL15_TXPOLL_M \ - 0x000000FF // RX Polling -#define USB_RXINTERVAL15_NAKLMT_M \ - 0x000000FF // NAK Limit -#define USB_RXINTERVAL15_TXPOLL_S \ - 0 -#define USB_RXINTERVAL15_NAKLMT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT1 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT1_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT1_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT2 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT2_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT2_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT3 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT3_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT3_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT4 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT4_COUNT_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT4_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT5 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT5_COUNT_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT5_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT6 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT6_COUNT_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT6_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT7 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT7_COUNT_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT7_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT8 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT8_COUNT_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT8_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT9 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT9_COUNT_M 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT9_COUNT_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT10 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT10_COUNT_M \ - 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT10_COUNT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT11 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT11_COUNT_M \ - 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT11_COUNT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT12 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT12_COUNT_M \ - 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT12_COUNT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT13 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT13_COUNT_M \ - 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT13_COUNT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT14 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT14_COUNT_M \ - 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT14_COUNT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RQPKTCOUNT15 -// register. -// -//***************************************************************************** -#define USB_RQPKTCOUNT15_COUNT_M \ - 0x0000FFFF // Block Transfer Packet Count -#define USB_RQPKTCOUNT15_COUNT_S \ - 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_RXDPKTBUFDIS -// register. -// -//***************************************************************************** -#define USB_RXDPKTBUFDIS_EP15 0x00008000 // EP15 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP14 0x00004000 // EP14 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP13 0x00002000 // EP13 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP12 0x00001000 // EP12 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP11 0x00000800 // EP11 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP10 0x00000400 // EP10 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP9 0x00000200 // EP9 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP8 0x00000100 // EP8 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP7 0x00000080 // EP7 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP6 0x00000040 // EP6 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP5 0x00000020 // EP5 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP4 0x00000010 // EP4 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP3 0x00000008 // EP3 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP2 0x00000004 // EP2 RX Double-Packet Buffer - // Disable -#define USB_RXDPKTBUFDIS_EP1 0x00000002 // EP1 RX Double-Packet Buffer - // Disable - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_TXDPKTBUFDIS -// register. -// -//***************************************************************************** -#define USB_TXDPKTBUFDIS_EP15 0x00008000 // EP15 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP14 0x00004000 // EP14 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP13 0x00002000 // EP13 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP12 0x00001000 // EP12 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP11 0x00000800 // EP11 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP10 0x00000400 // EP10 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP9 0x00000200 // EP9 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP8 0x00000100 // EP8 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP7 0x00000080 // EP7 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP6 0x00000040 // EP6 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP5 0x00000020 // EP5 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP4 0x00000010 // EP4 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP3 0x00000008 // EP3 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP2 0x00000004 // EP2 TX Double-Packet Buffer - // Disable -#define USB_TXDPKTBUFDIS_EP1 0x00000002 // EP1 TX Double-Packet Buffer - // Disable - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_EPC register. -// -//***************************************************************************** -#define USB_EPC_PFLTACT_M 0x00000300 // Power Fault Action -#define USB_EPC_PFLTACT_UNCHG 0x00000000 // Unchanged -#define USB_EPC_PFLTACT_TRIS 0x00000100 // Tristate -#define USB_EPC_PFLTACT_LOW 0x00000200 // Low -#define USB_EPC_PFLTACT_HIGH 0x00000300 // High -#define USB_EPC_PFLTAEN 0x00000040 // Power Fault Action Enable -#define USB_EPC_PFLTSEN_HIGH 0x00000020 // Power Fault Sense -#define USB_EPC_PFLTEN 0x00000010 // Power Fault Input Enable -#define USB_EPC_EPENDE 0x00000004 // EPEN Drive Enable -#define USB_EPC_EPEN_M 0x00000003 // External Power Supply Enable - // Configuration -#define USB_EPC_EPEN_LOW 0x00000000 // Power Enable Active Low -#define USB_EPC_EPEN_HIGH 0x00000001 // Power Enable Active High -#define USB_EPC_EPEN_VBLOW 0x00000002 // Power Enable High if VBUS Low -#define USB_EPC_EPEN_VBHIGH 0x00000003 // Power Enable High if VBUS High - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_EPCRIS register. -// -//***************************************************************************** -#define USB_EPCRIS_PF 0x00000001 // USB Power Fault Interrupt Status - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_EPCIM register. -// -//***************************************************************************** -#define USB_EPCIM_PF 0x00000001 // USB Power Fault Interrupt Mask - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_EPCISC register. -// -//***************************************************************************** -#define USB_EPCISC_PF 0x00000001 // USB Power Fault Interrupt Status - // and Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_DRRIS register. -// -//***************************************************************************** -#define USB_DRRIS_RESUME 0x00000001 // RESUME Interrupt Status - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_DRIM register. -// -//***************************************************************************** -#define USB_DRIM_RESUME 0x00000001 // RESUME Interrupt Mask - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_DRISC register. -// -//***************************************************************************** -#define USB_DRISC_RESUME 0x00000001 // RESUME Interrupt Status and - // Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_GPCS register. -// -//***************************************************************************** -#define USB_GPCS_DEVMODOTG 0x00000002 // Enable Device Mode -#define USB_GPCS_DEVMOD 0x00000001 // Device Mode - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_VDC register. -// -//***************************************************************************** -#define USB_VDC_VBDEN 0x00000001 // VBUS Droop Enable - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_VDCRIS register. -// -//***************************************************************************** -#define USB_VDCRIS_VD 0x00000001 // VBUS Droop Raw Interrupt Status - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_VDCIM register. -// -//***************************************************************************** -#define USB_VDCIM_VD 0x00000001 // VBUS Droop Interrupt Mask - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_VDCISC register. -// -//***************************************************************************** -#define USB_VDCISC_VD 0x00000001 // VBUS Droop Interrupt Status and - // Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_IDVRIS register. -// -//***************************************************************************** -#define USB_IDVRIS_ID 0x00000001 // ID Valid Detect Raw Interrupt - // Status - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_IDVIM register. -// -//***************************************************************************** -#define USB_IDVIM_ID 0x00000001 // ID Valid Detect Interrupt Mask - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_IDVISC register. -// -//***************************************************************************** -#define USB_IDVISC_ID 0x00000001 // ID Valid Detect Interrupt Status - // and Clear - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_DMASEL register. -// -//***************************************************************************** -#define USB_DMASEL_DMACTX_M 0x00F00000 // DMA C TX Select -#define USB_DMASEL_DMACRX_M 0x000F0000 // DMA C RX Select -#define USB_DMASEL_DMABTX_M 0x0000F000 // DMA B TX Select -#define USB_DMASEL_DMABRX_M 0x00000F00 // DMA B RX Select -#define USB_DMASEL_DMAATX_M 0x000000F0 // DMA A TX Select -#define USB_DMASEL_DMAARX_M 0x0000000F // DMA A RX Select -#define USB_DMASEL_DMACTX_S 20 -#define USB_DMASEL_DMACRX_S 16 -#define USB_DMASEL_DMABTX_S 12 -#define USB_DMASEL_DMABRX_S 8 -#define USB_DMASEL_DMAATX_S 4 -#define USB_DMASEL_DMAARX_S 0 - -//***************************************************************************** -// -// The following are defines for the bit fields in the USB_O_PP register. -// -//***************************************************************************** -#define USB_PP_ECNT_M 0x0000FF00 // Endpoint Count -#define USB_PP_USB_M 0x000000C0 // USB Capability -#define USB_PP_USB_DEVICE 0x00000040 // DEVICE -#define USB_PP_USB_HOSTDEVICE 0x00000080 // HOST -#define USB_PP_USB_OTG 0x000000C0 // OTG -#define USB_PP_PHY 0x00000010 // PHY Present -#define USB_PP_TYPE_M 0x0000000F // Controller Type -#define USB_PP_TYPE_0 0x00000000 // The first-generation USB - // controller -#define USB_PP_ECNT_S 8 - -//***************************************************************************** -// -// The following definitions are deprecated. -// -//***************************************************************************** -#ifndef DEPRECATED - -//***************************************************************************** -// -// The following are deprecated defines for the bit fields in the -// USB_O_TXFIFOADD register. -// -//***************************************************************************** -#define USB_TXFIFOADD_ADDR_2048 0x00000009 // 2048 -#define USB_TXFIFOADD_ADDR_1024 0x00000008 // 1024 -#define USB_TXFIFOADD_ADDR_512 0x00000007 // 512 -#define USB_TXFIFOADD_ADDR_256 0x00000006 // 256 -#define USB_TXFIFOADD_ADDR_128 0x00000005 // 128 -#define USB_TXFIFOADD_ADDR_64 0x00000004 // 64 -#define USB_TXFIFOADD_ADDR_32 0x00000003 // 32 -#define USB_TXFIFOADD_ADDR_16 0x00000002 // 16 -#define USB_TXFIFOADD_ADDR_8 0x00000001 // 8 -#define USB_TXFIFOADD_ADDR_0 0x00000000 // 0 - -//***************************************************************************** -// -// The following are deprecated defines for the bit fields in the -// USB_O_RXFIFOADD register. -// -//***************************************************************************** -#define USB_RXFIFOADD_ADDR_2048 0x00000009 // 2048 -#define USB_RXFIFOADD_ADDR_1024 0x00000008 // 1024 -#define USB_RXFIFOADD_ADDR_512 0x00000007 // 512 -#define USB_RXFIFOADD_ADDR_256 0x00000006 // 256 -#define USB_RXFIFOADD_ADDR_128 0x00000005 // 128 -#define USB_RXFIFOADD_ADDR_64 0x00000004 // 64 -#define USB_RXFIFOADD_ADDR_32 0x00000003 // 32 -#define USB_RXFIFOADD_ADDR_16 0x00000002 // 16 -#define USB_RXFIFOADD_ADDR_8 0x00000001 // 8 -#define USB_RXFIFOADD_ADDR_0 0x00000000 // 0 - -#endif - -#endif // __HW_USB_H__ diff --git a/bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.c b/bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.c deleted file mode 100644 index a58927013e..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.c +++ /dev/null @@ -1,214 +0,0 @@ -//########################################################################### -// -// FILE: cmdline.c -// -// TITLE: Functions to help with processing command lines. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -//***************************************************************************** -// -//! \addtogroup cmdline_api -//! @{ -// -//***************************************************************************** - -// -// Included Files -// -#include -#include -#include -#include "utils/cmdline.h" - -// -// Defines the maximum number of arguments that can be parsed. -// -#ifndef CMDLINE_MAX_ARGS -#define CMDLINE_MAX_ARGS 8 -#endif - -// -// An array to hold the pointers to the command line arguments. -// -static char *g_ppcArgv[CMDLINE_MAX_ARGS + 1]; - -//***************************************************************************** -// -//! Process a command line string into arguments and execute the command. -//! -//! \param pcCmdLine points to a string that contains a command line that was -//! obtained by an application by some means. -//! -//! This function will take the supplied command line string and break it up -//! into individual arguments. The first argument is treated as a command and -//! is searched for in the command table. If the command is found, then the -//! command function is called and all of the command line arguments are passed -//! in the normal argc, argv form. -//! -//! The command table is contained in an array named g_psCmdTable -//! containing tCmdLineEntry structures which must be provided by the -//! application. The array must be terminated with an entry whose \b pcCmd -//! field contains a NULL pointer. -//! -//! \return Returns \b CMDLINE_BAD_CMD if the command is not found, -//! \b CMDLINE_TOO_MANY_ARGS if there are more arguments than can be parsed. -//! Otherwise it returns the code that was returned by the command function. -// -//***************************************************************************** -int -CmdLineProcess(char *pcCmdLine) -{ - char *pcChar; - uint_fast8_t ui8Argc; - bool bFindArg = true; - tCmdLineEntry *psCmdEntry; - - // - // Initialize the argument counter, and point to the beginning of the - // command line string. - // - ui8Argc = 0; - pcChar = pcCmdLine; - - // - // Advance through the command line until a zero character is found. - // - while(*pcChar) - { - // - // If there is a space, then replace it with a zero, and set the flag - // to search for the next argument. - // - if(*pcChar == ' ') - { - *pcChar = 0; - bFindArg = true; - } - - // - // Otherwise it is not a space, so it must be a character that is part - // of an argument. - // - else - { - // - // If bFindArg is set, then that means we are looking for the start - // of the next argument. - // - if(bFindArg) - { - // - // As long as the maximum number of arguments has not been - // reached, then save the pointer to the start of this new arg - // in the argv array, and increment the count of args, argc. - // - if(ui8Argc < CMDLINE_MAX_ARGS) - { - g_ppcArgv[ui8Argc] = pcChar; - ui8Argc++; - bFindArg = false; - } - - // - // The maximum number of arguments has been reached so return - // the error. - // - else - { - return(CMDLINE_TOO_MANY_ARGS); - } - } - } - - // - // Advance to the next character in the command line. - // - pcChar++; - } - - // - // If one or more arguments was found, then process the command. - // - if(ui8Argc) - { - // - // Start at the beginning of the command table, to look for a matching - // command. - // - psCmdEntry = &g_psCmdTable[0]; - - // - // Search through the command table until a null command string is - // found, which marks the end of the table. - // - while(psCmdEntry->pcCmd) - { - // - // If this command entry command string matches argv[0], then call - // the function for this command, passing the command line - // arguments. - // - if(!strcmp(g_ppcArgv[0], psCmdEntry->pcCmd)) - { - return(psCmdEntry->pfnCmd(ui8Argc, g_ppcArgv)); - } - - // - // Not found, so advance to the next entry. - // - psCmdEntry++; - } - } - - // - // Fall through to here means that no matching command was found, so return - // an error. - // - return(CMDLINE_BAD_CMD); -} - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - -// -// End of file -// diff --git a/bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.h b/bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.h deleted file mode 100644 index 47c3fa1b23..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/utils/cmdline.h +++ /dev/null @@ -1,143 +0,0 @@ -//########################################################################### -// -// FILE: cmdline.h -// -// TITLE: Prototypes for command line processing functions. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __CMDLINE_H__ -#define __CMDLINE_H__ - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - -//***************************************************************************** -// -//! \addtogroup cmdline_api -//! @{ -// -//***************************************************************************** - -// -//! Defines the value that is returned if the command is not found. -// -#define CMDLINE_BAD_CMD (-1) - -// -//! Defines the value that is returned if there are too many arguments. -// -#define CMDLINE_TOO_MANY_ARGS (-2) - -// -//! Defines the value that is returned if there are too few arguments. -// -#define CMDLINE_TOO_FEW_ARGS (-3) - -// -//! Defines the value that is returned if an argument is invalid. -// -#define CMDLINE_INVALID_ARG (-4) - -// -// Command line function callback type. -// -typedef int (*pfnCmdLine)(int argc, char *argv[]); - -// -//! Structure for an entry in the command list table. -// -typedef struct -{ - // - //! A pointer to a string containing the name of the command. - // - const char *pcCmd; - - // - //! A function pointer to the implementation of the command. - // - pfnCmdLine pfnCmd; - - // - //! A pointer to a string of brief help text for the command. - // - const char *pcHelp; -} -tCmdLineEntry; - -// -//! This is the command table that must be provided by the application. The -//! last element of the array must be a structure whose pcCmd field contains -//! a NULL pointer. -// -extern tCmdLineEntry g_psCmdTable[]; - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - -// -// Function Prototypes -// -extern int CmdLineProcess(char *pcCmdLine); - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -#endif // __CMDLINE_H__ - -// -// End of file -// diff --git a/bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.c b/bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.c deleted file mode 100644 index 07354f184d..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.c +++ /dev/null @@ -1,1773 +0,0 @@ -//########################################################################### -// -// FILE: uartstdio.c -// -// TITLE: Utility driver to provide simple UART console functions. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -// -// Included Files -// -#include -#include -#include -#include "inc/hw_ints.h" -#include "inc/hw_memmap.h" -#include "inc/hw_types.h" -#include "inc/hw_uart.h" -#include "driverlib/debug.h" -#include "driverlib/interrupt.h" -#include "driverlib/rom.h" -#include "driverlib/rom_map.h" -#include "driverlib/sysctl.h" -#include "driverlib/uart.h" -#include "utils/uartstdio.h" - -//***************************************************************************** -// -//! \addtogroup uartstdio_api -//! @{ -// -//***************************************************************************** - -// -// If buffered mode is defined, set aside RX and TX buffers and read/write -// pointers to control them. -// -#ifdef UART_BUFFERED - -// -// This global controls whether or not we are echoing characters back to the -// transmitter. By default, echo is enabled but if using this module as a -// convenient method of implementing a buffered serial interface over which -// you will be running an application protocol, you are likely to want to -// disable echo by calling UARTEchoSet(false). -// -static bool g_bDisableEcho; - -// -// Output ring buffer. Buffer is full if g_ui32UARTTxReadIndex is one ahead of -// g_ui32UARTTxWriteIndex. Buffer is empty if the two indices are the same. -// -static unsigned char g_pcUARTTxBuffer[UART_TX_BUFFER_SIZE]; -static volatile uint32_t g_ui32UARTTxWriteIndex = 0; -static volatile uint32_t g_ui32UARTTxReadIndex = 0; - -// -// Input ring buffer. Buffer is full if g_ui32UARTTxReadIndex is one ahead of -// g_ui32UARTTxWriteIndex. Buffer is empty if the two indices are the same. -// -static unsigned char g_pcUARTRxBuffer[UART_RX_BUFFER_SIZE]; -static volatile uint32_t g_ui32UARTRxWriteIndex = 0; -static volatile uint32_t g_ui32UARTRxReadIndex = 0; - -// -// Macros to determine number of free and used bytes in the transmit buffer. -// -#define TX_BUFFER_USED (GetBufferCount(&g_ui32UARTTxReadIndex, \ - &g_ui32UARTTxWriteIndex, \ - UART_TX_BUFFER_SIZE)) -#define TX_BUFFER_FREE (UART_TX_BUFFER_SIZE - TX_BUFFER_USED) -#define TX_BUFFER_EMPTY (IsBufferEmpty(&g_ui32UARTTxReadIndex, \ - &g_ui32UARTTxWriteIndex)) -#define TX_BUFFER_FULL (IsBufferFull(&g_ui32UARTTxReadIndex, \ - &g_ui32UARTTxWriteIndex, \ - UART_TX_BUFFER_SIZE)) -#define ADVANCE_TX_BUFFER_INDEX(Index) \ - (Index) = ((Index) + 1) % UART_TX_BUFFER_SIZE - -// -// Macros to determine number of free and used bytes in the receive buffer. -// -#define RX_BUFFER_USED (GetBufferCount(&g_ui32UARTRxReadIndex, \ - &g_ui32UARTRxWriteIndex, \ - UART_RX_BUFFER_SIZE)) -#define RX_BUFFER_FREE (UART_RX_BUFFER_SIZE - RX_BUFFER_USED) -#define RX_BUFFER_EMPTY (IsBufferEmpty(&g_ui32UARTRxReadIndex, \ - &g_ui32UARTRxWriteIndex)) -#define RX_BUFFER_FULL (IsBufferFull(&g_ui32UARTRxReadIndex, \ - &g_ui32UARTRxWriteIndex, \ - UART_RX_BUFFER_SIZE)) -#define ADVANCE_RX_BUFFER_INDEX(Index) \ - (Index) = ((Index) + 1) % UART_RX_BUFFER_SIZE -#endif - -// -// The base address of the chosen UART. -// -static uint32_t g_ui32Base = 0; - -// -// A mapping from an integer between 0 and 15 to its ASCII character -// equivalent. -// -static const char * const g_pcHex = "0123456789abcdef"; - -// -// The list of possible base addresses for the console UART. -// -static const uint32_t g_ui32UARTBase[4] = -{ - UARTA_BASE, UARTB_BASE, UARTC_BASE, UARTD_BASE -}; - -#ifdef UART_BUFFERED -// -// The list of possible interrupts for the console UART. -// -static const uint32_t g_ui32UARTInt[3] = -{ - INT_UART0, INT_UART1, INT_UART2 -}; - -// -// The port number in use. -// -static uint32_t g_ui32PortNum; -#endif - -// -// The list of UART peripherals. -// -static const uint32_t g_ui32UARTPeriph[3] = -{ - SYSCTL_PERIPH_SCI1, SYSCTL_PERIPH_SCI2, SYSCTL_PERIPH_SCI3 -}; - -//***************************************************************************** -// -//! Determines whether the ring buffer whose pointers and size are provided -//! is full or not. -//! -//! \param pui32Read points to the read index for the buffer. -//! \param pui32Write points to the write index for the buffer. -//! \param ui32Size is the size of the buffer in bytes. -//! -//! This function is used to determine whether or not a given ring buffer is -//! full. The structure of the code is specifically to ensure that we do not -//! see warnings from the compiler related to the order of volatile accesses -//! being undefined. -//! -//! \return Returns \b true if the buffer is full or \b false otherwise. -// -//***************************************************************************** -#ifdef UART_BUFFERED -static bool -IsBufferFull(volatile uint32_t *pui32Read, - volatile uint32_t *pui32Write, uint32_t ui32Size) -{ - uint32_t ui32Write; - uint32_t ui32Read; - - ui32Write = *pui32Write; - ui32Read = *pui32Read; - - return((((ui32Write + 1) % ui32Size) == ui32Read) ? true : false); -} -#endif - -//***************************************************************************** -// -//! Determines whether the ring buffer whose pointers and size are provided -//! is empty or not. -//! -//! \param pui32Read points to the read index for the buffer. -//! \param pui32Write points to the write index for the buffer. -//! -//! This function is used to determine whether or not a given ring buffer is -//! empty. The structure of the code is specifically to ensure that we do not -//! see warnings from the compiler related to the order of volatile accesses -//! being undefined. -//! -//! \return Returns \b true if the buffer is empty or \b false otherwise. -// -//***************************************************************************** -#ifdef UART_BUFFERED -static bool -IsBufferEmpty(volatile uint32_t *pui32Read, - volatile uint32_t *pui32Write) -{ - uint32_t ui32Write; - uint32_t ui32Read; - - ui32Write = *pui32Write; - ui32Read = *pui32Read; - - return((ui32Write == ui32Read) ? true : false); -} -#endif - -//***************************************************************************** -// -//! Determines the number of bytes of data contained in a ring buffer. -//! -//! \param pui32Read points to the read index for the buffer. -//! \param pui32Write points to the write index for the buffer. -//! \param ui32Size is the size of the buffer in bytes. -//! -//! This function is used to determine how many bytes of data a given ring -//! buffer currently contains. The structure of the code is specifically to -//! ensure that we do not see warnings from the compiler related to the order -//! of volatile accesses being undefined. -//! -//! \return Returns the number of bytes of data currently in the buffer. -// -//***************************************************************************** -#ifdef UART_BUFFERED -static uint32_t -GetBufferCount(volatile uint32_t *pui32Read, - volatile uint32_t *pui32Write, uint32_t ui32Size) -{ - uint32_t ui32Write; - uint32_t ui32Read; - - ui32Write = *pui32Write; - ui32Read = *pui32Read; - - return((ui32Write >= ui32Read) ? (ui32Write - ui32Read) : - (ui32Size - (ui32Read - ui32Write))); -} -#endif - -//***************************************************************************** -// -// Take as many bytes from the transmit buffer as we have space for and move -// them into the UART transmit FIFO. -// -//***************************************************************************** -#ifdef UART_BUFFERED -static void -UARTPrimeTransmit(uint32_t ui32Base) -{ - // - // Do we have any data to transmit? - // - if(!TX_BUFFER_EMPTY) - { - // - // Disable the UART interrupt. If we don't do this there is a race - // condition which can cause the read index to be corrupted. - // - MAP_IntDisable(g_ui32UARTInt[g_ui32PortNum]); - - // - // Yes - take some characters out of the transmit buffer and feed - // them to the UART transmit FIFO. - // - while(MAP_UARTSpaceAvail(ui32Base) && !TX_BUFFER_EMPTY) - { - MAP_UARTCharPutNonBlocking(ui32Base, - g_pcUARTTxBuffer[g_ui32UARTTxReadIndex]); - ADVANCE_TX_BUFFER_INDEX(g_ui32UARTTxReadIndex); - } - - // - // Reenable the UART interrupt. - // - MAP_IntEnable(g_ui32UARTInt[g_ui32PortNum]); - } -} -#endif - -//***************************************************************************** -// -//! Configures the UART console. -//! -//! \param ui32PortNum is the number of UART port to use for the serial console -//! (0-2) -//! \param ui32Baud is the bit rate that the UART is to be configured to use. -//! \param ui32SrcClock is the frequency of the source clock for the UART -//! module. -//! -//! This function will configure the specified serial port to be used as a -//! serial console. The serial parameters are set to the baud rate -//! specified by the \e ui32Baud parameter and use 8 bit, no parity, and 1 stop -//! bit. -//! -//! This function must be called prior to using any of the other UART console -//! functions: UARTprintf() or UARTgets(). This function assumes that the -//! caller has previously configured the relevant UART pins for operation as a -//! UART rather than as GPIOs. -//! -//! \return None. -// -//***************************************************************************** -void -UARTStdioConfig(uint32_t ui32PortNum, uint32_t ui32Baud, uint32_t ui32SrcClock) -{ - // - // Check the arguments. - // - ASSERT((ui32PortNum == 0) || (ui32PortNum == 1) || - (ui32PortNum == 2)); - -#ifdef UART_BUFFERED - // - // In buffered mode, we only allow a single instance to be opened. - // - ASSERT(g_ui32Base == 0); -#endif - - // - // Check to make sure the UART peripheral is present. - // - if(!MAP_SysCtlPeripheralPresent(g_ui32UARTPeriph[ui32PortNum])) - { - return; - } - - // - // Select the base address of the UART. - // - g_ui32Base = g_ui32UARTBase[ui32PortNum]; - - // - // Enable the UART peripheral for use. - // - MAP_SysCtlPeripheralEnable(g_ui32UARTPeriph[ui32PortNum]); - - // - // Configure the UART for 115200, n, 8, 1 - // - MAP_UARTConfigSetExpClk(g_ui32Base, ui32SrcClock, ui32Baud, - (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | - UART_CONFIG_WLEN_8)); - -#ifdef UART_BUFFERED - // - // Set the UART to interrupt whenever the TX FIFO is almost empty or - // when any character is received. - // - MAP_UARTFIFOLevelSet(g_ui32Base, UART_FIFO_TX1_8, UART_FIFO_RX1_8); - - // - // Flush both the buffers. - // - UARTFlushRx(); - UARTFlushTx(true); - - // - // Remember which interrupt we are dealing with. - // - g_ui32PortNum = ui32PortNum; - - // - // We are configured for buffered output so enable the master interrupt - // for this UART and the receive interrupts. We don't actually enable the - // transmit interrupt in the UART itself until some data has been placed - // in the transmit buffer. - // - MAP_UARTIntDisable(g_ui32Base, 0xFFFFFFFF); - MAP_UARTIntEnable(g_ui32Base, UART_INT_RX | UART_INT_RT); - MAP_IntEnable(g_ui32UARTInt[ui32PortNum]); -#endif - - // - // Enable the UART operation. - // - MAP_UARTEnable(g_ui32Base); -} - -//***************************************************************************** -// -//! Writes a string of characters to the UART output. -//! -//! \param pcBuf points to a buffer containing the string to transmit. -//! \param ui32Len is the length of the string to transmit. -//! -//! This function will transmit the string to the UART output. The number of -//! characters transmitted is determined by the \e ui32Len parameter. This -//! function does no interpretation or translation of any characters. Since -//! the output is sent to a UART, any LF (/n) characters encountered will be -//! replaced with a CRLF pair. -//! -//! Besides using the \e ui32Len parameter to stop transmitting the string, if -//! a null character (0) is encountered, then no more characters will be -//! transmitted and the function will return. -//! -//! In non-buffered mode, this function is blocking and will not return until -//! all the characters have been written to the output FIFO. In buffered mode, -//! the characters are written to the UART transmit buffer and the call returns -//! immediately. If insufficient space remains in the transmit buffer, -//! additional characters are discarded. -//! -//! \return Returns the count of characters written. -// -//***************************************************************************** -int -UARTwrite(const char *pcBuf, uint32_t ui32Len) -{ -#ifdef UART_BUFFERED - unsigned int uIdx; - - // - // Check for valid arguments. - // - ASSERT(pcBuf != 0); - ASSERT(g_ui32Base != 0); - - // - // Send the characters - // - for(uIdx = 0; uIdx < ui32Len; uIdx++) - { - // - // If the character to the UART is \n, then add a \r before it so that - // \n is translated to \n\r in the output. - // - if(pcBuf[uIdx] == '\n') - { - if(!TX_BUFFER_FULL) - { - g_pcUARTTxBuffer[g_ui32UARTTxWriteIndex] = '\r'; - ADVANCE_TX_BUFFER_INDEX(g_ui32UARTTxWriteIndex); - } - else - { - // - // Buffer is full - discard remaining characters and return. - // - break; - } - } - - // - // Send the character to the UART output. - // - if(!TX_BUFFER_FULL) - { - g_pcUARTTxBuffer[g_ui32UARTTxWriteIndex] = pcBuf[uIdx]; - ADVANCE_TX_BUFFER_INDEX(g_ui32UARTTxWriteIndex); - } - else - { - // - // Buffer is full - discard remaining characters and return. - // - break; - } - } - - // - // If we have anything in the buffer, make sure that the UART is set - // up to transmit it. - // - if(!TX_BUFFER_EMPTY) - { - UARTPrimeTransmit(g_ui32Base); - MAP_UARTIntEnable(g_ui32Base, UART_INT_TX); - } - - // - // Return the number of characters written. - // - return(uIdx); -#else - unsigned int uIdx; - - // - // Check for valid UART base address, and valid arguments. - // - ASSERT(g_ui32Base != 0); - ASSERT(pcBuf != 0); - - // - // Send the characters - // - for(uIdx = 0; uIdx < ui32Len; uIdx++) - { - // - // If the character to the UART is \n, then add a \r before it so that - // \n is translated to \n\r in the output. - // - if(pcBuf[uIdx] == '\n') - { - MAP_UARTCharPut(g_ui32Base, '\r'); - } - - // - // Send the character to the UART output. - // - MAP_UARTCharPut(g_ui32Base, pcBuf[uIdx]); - } - - // - // Return the number of characters written. - // - return(uIdx); -#endif -} - -//***************************************************************************** -// -//! A simple UART based get string function, with some line processing. -//! -//! \param pcBuf points to a buffer for the incoming string from the UART. -//! \param ui32Len is the length of the buffer for storage of the string, -//! including the trailing 0. -//! -//! This function will receive a string from the UART input and store the -//! characters in the buffer pointed to by \e pcBuf. The characters will -//! continue to be stored until a termination character is received. The -//! termination characters are CR, LF, or ESC. A CRLF pair is treated as a -//! single termination character. The termination characters are not stored in -//! the string. The string will be terminated with a 0 and the function will -//! return. -//! -//! In both buffered and unbuffered modes, this function will block until -//! a termination character is received. If non-blocking operation is required -//! in buffered mode, a call to UARTPeek() may be made to determine whether -//! a termination character already exists in the receive buffer prior to -//! calling UARTgets(). -//! -//! Since the string will be null terminated, the user must ensure that the -//! buffer is sized to allow for the additional null character. -//! -//! \return Returns the count of characters that were stored, not including -//! the trailing 0. -// -//***************************************************************************** -int -UARTgets(char *pcBuf, uint32_t ui32Len) -{ -#ifdef UART_BUFFERED - uint32_t ui32Count = 0; - int8_t cChar; - - // - // Check the arguments. - // - ASSERT(pcBuf != 0); - ASSERT(ui32Len != 0); - ASSERT(g_ui32Base != 0); - - // - // Adjust the length back by 1 to leave space for the trailing - // null terminator. - // - ui32Len--; - - // - // Process characters until a newline is received. - // - while(1) - { - // - // Read the next character from the receive buffer. - // - if(!RX_BUFFER_EMPTY) - { - cChar = g_pcUARTRxBuffer[g_ui32UARTRxReadIndex]; - ADVANCE_RX_BUFFER_INDEX(g_ui32UARTRxReadIndex); - - // - // See if a newline or escape character was received. - // - if((cChar == '\r') || (cChar == '\n') || (cChar == 0x1b)) - { - // - // Stop processing the input and end the line. - // - break; - } - - // - // Process the received character as long as we are not at the end - // of the buffer. If the end of the buffer has been reached then - // all additional characters are ignored until a newline is - // received. - // - if(ui32Count < ui32Len) - { - // - // Store the character in the caller supplied buffer. - // - pcBuf[ui32Count] = cChar; - - // - // Increment the count of characters received. - // - ui32Count++; - } - } - } - - // - // Add a null termination to the string. - // - pcBuf[ui32Count] = 0; - - // - // Return the count of int8_ts in the buffer, not counting the trailing 0. - // - return(ui32Count); -#else - uint32_t ui32Count = 0; - int8_t cChar; - static int8_t bLastWasCR = 0; - - // - // Check the arguments. - // - ASSERT(pcBuf != 0); - ASSERT(ui32Len != 0); - ASSERT(g_ui32Base != 0); - - // - // Adjust the length back by 1 to leave space for the trailing - // null terminator. - // - ui32Len--; - - // - // Process characters until a newline is received. - // - while(1) - { - // - // Read the next character from the console. - // - cChar = MAP_UARTCharGet(g_ui32Base); - - // - // See if the backspace key was pressed. - // - if(cChar == '\b') - { - // - // If there are any characters already in the buffer, then delete - // the last. - // - if(ui32Count) - { - // - // Rub out the previous character. - // - UARTwrite("\b \b", 3); - - // - // Decrement the number of characters in the buffer. - // - ui32Count--; - } - - // - // Skip ahead to read the next character. - // - continue; - } - - // - // If this character is LF and last was CR, then just gobble up the - // character because the EOL processing was taken care of with the CR. - // - if((cChar == '\n') && bLastWasCR) - { - bLastWasCR = 0; - continue; - } - - // - // See if a newline or escape character was received. - // - if((cChar == '\r') || (cChar == '\n') || (cChar == 0x1b)) - { - // - // If the character is a CR, then it may be followed by a LF which - // should be paired with the CR. So remember that a CR was - // received. - // - if(cChar == '\r') - { - bLastWasCR = 1; - } - - // - // Stop processing the input and end the line. - // - break; - } - - // - // Process the received character as long as we are not at the end of - // the buffer. If the end of the buffer has been reached then all - // additional characters are ignored until a newline is received. - // - if(ui32Count < ui32Len) - { - // - // Store the character in the caller supplied buffer. - // - pcBuf[ui32Count] = cChar; - - // - // Increment the count of characters received. - // - ui32Count++; - - // - // Reflect the character back to the user. - // - MAP_UARTCharPut(g_ui32Base, cChar); - } - } - - // - // Add a null termination to the string. - // - pcBuf[ui32Count] = 0; - - // - // Send a CRLF pair to the terminal to end the line. - // - UARTwrite("\r\n", 2); - - // - // Return the count of int8_ts in the buffer, not counting the trailing 0. - // - return(ui32Count); -#endif -} - -//***************************************************************************** -// -//! Read a single character from the UART, blocking if necessary. -//! -//! This function will receive a single character from the UART and store it at -//! the supplied address. -//! -//! In both buffered and unbuffered modes, this function will block until a -//! character is received. If non-blocking operation is required in buffered -//! mode, a call to UARTRxAvail() may be made to determine whether any -//! characters are currently available for reading. -//! -//! \return Returns the character read. -// -//***************************************************************************** -unsigned char -UARTgetc(void) -{ -#ifdef UART_BUFFERED - unsigned char cChar; - - // - // Wait for a character to be received. - // - while(RX_BUFFER_EMPTY) - { - // - // Block waiting for a character to be received (if the buffer is - // currently empty). - // - } - - // - // Read a character from the buffer. - // - cChar = g_pcUARTRxBuffer[g_ui32UARTRxReadIndex]; - ADVANCE_RX_BUFFER_INDEX(g_ui32UARTRxReadIndex); - - // - // Return the character to the caller. - // - return(cChar); -#else - // - // Block until a character is received by the UART then return it to - // the caller. - // - return(MAP_UARTCharGet(g_ui32Base)); -#endif -} - -//***************************************************************************** -// -//! A simple UART based vprintf function supporting \%c, \%d, \%p, \%s, \%u, -//! \%x, and \%X. -//! -//! \param pcString is the format string. -//! \param vaArgP is a variable argument list pointer whose content will depend -//! upon the format string passed in \e pcString. -//! -//! This function is very similar to the C library vprintf() function. -//! All of its output will be sent to the UART. Only the following formatting -//! characters are supported: -//! -//! - \%c to print a character -//! - \%d or \%i to print a decimal value -//! - \%l to print a long decimal value -//! - \%s to print a string -//! - \%u to print an unsigned decimal value -//! - \%x to print a hexadecimal value using lower case letters -//! - \%X to print a hexadecimal value using lower case letters (not upper case -//! letters as would typically be used) -//! - \%p to print a pointer as a hexadecimal value -//! - \%\% to print out a \% character -//! -//! For \%s, \%d, \%i, \%u, \%p, \%x, and \%X, an optional number may reside -//! between the \% and the format character, which specifies the minimum number -//! of characters to use for that value; if preceded by a 0 then the extra -//! characters will be filled with zeros instead of spaces. For example, -//! ``\%8d'' will use eight characters to print the decimal value with spaces -//! added to reach eight; ``\%08d'' will use eight characters as well but will -//! add zeroes instead of spaces. -//! -//! The type of the arguments in the variable arguments list must match the -//! requirements of the format string. For example, if an integer was passed -//! where a string was expected, an error of some kind will most likely occur. -//! -//! \return None. -// -//***************************************************************************** -void -UARTvprintf(const char *pcString, va_list vaArgP) -{ - uint32_t ui32Idx, ui32Value, ui32Pos, ui32Count, ui32Base, ui32Neg; - char *pcStr, pcBuf[16], cFill; - - // - // Check the arguments. - // - ASSERT(pcString != 0); - - // - // Loop while there are more characters in the string. - // - while(*pcString) - { - // - // Find the first non-% character, or the end of the string. - // - for(ui32Idx = 0; - (pcString[ui32Idx] != '%') && (pcString[ui32Idx] != '\0'); - ui32Idx++) - { - } - - // - // Write this portion of the string. - // - UARTwrite(pcString, ui32Idx); - - // - // Skip the portion of the string that was written. - // - pcString += ui32Idx; - - // - // See if the next character is a %. - // - if(*pcString == '%') - { - // - // Skip the %. - // - pcString++; - - // - // Set the digit count to zero, and the fill character to space - // (in other words, to the defaults). - // - ui32Count = 0; - cFill = ' '; - - // - // It may be necessary to get back here to process more characters. - // Goto's aren't pretty, but effective. I feel extremely dirty for - // using not one but two of the beasts. - // -again: - - // - // Determine how to handle the next character. - // - switch(*pcString++) - { - // - // Handle the digit characters. - // - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - // - // If this is a zero, and it is the first digit, then the - // fill character is a zero instead of a space. - // - if((pcString[-1] == '0') && (ui32Count == 0)) - { - cFill = '0'; - } - - // - // Update the digit count. - // - ui32Count *= 10; - ui32Count += pcString[-1] - '0'; - - // - // Get the next character. - // - goto again; - } - - // - // Handle the %c command. - // - case 'c': - { - // - // Get the value from the varargs. - // - ui32Value = va_arg(vaArgP, uint32_t); - - // - // Print out the character. - // - UARTwrite((char *)&ui32Value, 1); - - // - // This command has been handled. - // - break; - } - - // - // Handle the %d and %i commands. - // - case 'd': - case 'i': - { - // - // Get the value from the varargs. - // - ui32Value = va_arg(vaArgP, uint16_t); - - // - // Reset the buffer position. - // - ui32Pos = 0; - - // - // If the value is negative, make it positive and indicate - // that a minus sign is needed. - // - if((int32_t)ui32Value < 0) - { - // - // Make the value positive. - // - ui32Value = -(int32_t)ui32Value; - - // - // Indicate that the value is negative. - // - ui32Neg = 1; - } - else - { - // - // Indicate that the value is positive so that a minus - // sign isn't inserted. - // - ui32Neg = 0; - } - - // - // Set the base to 10. - // - ui32Base = 10; - - // - // Convert the value to ASCII. - // - goto convert; - } - - // - // Handle the %l command. - // - case 'l': - { - // - // Get the value from the varargs. - // - ui32Value = va_arg(vaArgP, uint32_t); - - // - // Reset the buffer position. - // - ui32Pos = 0; - - // - // If the value is negative, make it positive and indicate - // that a minus sign is needed. - // - if((int32_t)ui32Value < 0) - { - // - // Make the value positive. - // - ui32Value = -(int32_t)ui32Value; - - // - // Indicate that the value is negative. - // - ui32Neg = 1; - } - else - { - // - // Indicate that the value is positive so that a minus - // sign isn't inserted. - // - ui32Neg = 0; - } - - // - // Set the base to 10. - // - ui32Base = 10; - - // - // Convert the value to ASCII. - // - goto convert; - } - - // - // Handle the %s command. - // - case 's': - { - // - // Get the string pointer from the varargs. - // - pcStr = va_arg(vaArgP, char *); - - // - // Determine the length of the string. - // - for(ui32Idx = 0; pcStr[ui32Idx] != '\0'; ui32Idx++) - { - } - - // - // Write the string. - // - UARTwrite(pcStr, ui32Idx); - - // - // Write any required padding spaces - // - if(ui32Count > ui32Idx) - { - ui32Count -= ui32Idx; - while(ui32Count--) - { - UARTwrite(" ", 1); - } - } - - // - // This command has been handled. - // - break; - } - - // - // Handle the %u command. - // - case 'u': - { - // - // Get the value from the varargs. - // - ui32Value = va_arg(vaArgP, uint32_t); - - // - // Reset the buffer position. - // - ui32Pos = 0; - - // - // Set the base to 10. - // - ui32Base = 10; - - // - // Indicate that the value is positive so that a minus sign - // isn't inserted. - // - ui32Neg = 0; - - // - // Convert the value to ASCII. - // - goto convert; - } - - // - // Handle the %x and %X commands. Note that they are treated - // identically; in other words, %X will use lower case letters - // for a-f instead of the upper case letters it should use. We - // also alias %p to %x. - // - case 'x': - case 'X': - case 'p': - { - // - // Get the value from the varargs. - // - ui32Value = va_arg(vaArgP, uint32_t); - - // - // Reset the buffer position. - // - ui32Pos = 0; - - // - // Set the base to 16. - // - ui32Base = 16; - - // - // Indicate that the value is positive so that a minus sign - // isn't inserted. - // - ui32Neg = 0; - - // - // Determine the number of digits in the string version of - // the value. - // -convert: - for(ui32Idx = 1; - (((ui32Idx * ui32Base) <= ui32Value) && - (((ui32Idx * ui32Base) / ui32Base) == ui32Idx)); - ui32Idx *= ui32Base, ui32Count--) - { - } - - // - // If the value is negative, reduce the count of padding - // characters needed. - // - if(ui32Neg) - { - ui32Count--; - } - - // - // If the value is negative and the value is padded with - // zeros, then place the minus sign before the padding. - // - if(ui32Neg && (cFill == '0')) - { - // - // Place the minus sign in the output buffer. - // - pcBuf[ui32Pos++] = '-'; - - // - // The minus sign has been placed, so turn off the - // negative flag. - // - ui32Neg = 0; - } - - // - // Provide additional padding at the beginning of the - // string conversion if needed. - // - if((ui32Count > 1) && (ui32Count < 16)) - { - for(ui32Count--; ui32Count; ui32Count--) - { - pcBuf[ui32Pos++] = cFill; - } - } - - // - // If the value is negative, then place the minus sign - // before the number. - // - if(ui32Neg) - { - // - // Place the minus sign in the output buffer. - // - pcBuf[ui32Pos++] = '-'; - } - - // - // Convert the value into a string. - // - for(; ui32Idx; ui32Idx /= ui32Base) - { - pcBuf[ui32Pos++] = - g_pcHex[(ui32Value / ui32Idx) % ui32Base]; - } - - // - // Write the string. - // - UARTwrite(pcBuf, ui32Pos); - - // - // This command has been handled. - // - break; - } - - // - // Handle the %% command. - // - case '%': - { - // - // Simply write a single %. - // - UARTwrite(pcString - 1, 1); - - // - // This command has been handled. - // - break; - } - - // - // Handle all other commands. - // - default: - { - // - // Indicate an error. - // - UARTwrite("ERROR", 5); - - // - // This command has been handled. - // - break; - } - } - } - } -} - -//***************************************************************************** -// -//! A simple UART based printf function supporting \%c, \%d, \%p, \%s, \%u, -//! \%x, and \%X. -//! -//! \param pcString is the format string. -//! \param ... are the optional arguments, which depend on the contents of the -//! format string. -//! -//! This function is very similar to the C library fprintf() function. -//! All of its output will be sent to the UART. Only the following formatting -//! characters are supported: -//! -//! - \%c to print a character -//! - \%d or \%i to print a decimal value -//! - \%s to print a string -//! - \%u to print an unsigned decimal value -//! - \%x to print a hexadecimal value using lower case letters -//! - \%X to print a hexadecimal value using lower case letters (not upper case -//! letters as would typically be used) -//! - \%p to print a pointer as a hexadecimal value -//! - \%\% to print out a \% character -//! -//! For \%s, \%d, \%i, \%u, \%p, \%x, and \%X, an optional number may reside -//! between the \% and the format character, which specifies the minimum number -//! of characters to use for that value; if preceded by a 0 then the extra -//! characters will be filled with zeros instead of spaces. For example, -//! ``\%8d'' will use eight characters to print the decimal value with spaces -//! added to reach eight; ``\%08d'' will use eight characters as well but will -//! add zeroes instead of spaces. -//! -//! The type of the arguments after \e pcString must match the requirements of -//! the format string. For example, if an integer was passed where a string -//! was expected, an error of some kind will most likely occur. -//! -//! \return None. -// -//***************************************************************************** -void -UARTprintf(const char *pcString, ...) -{ - va_list vaArgP; - - // - // Start the varargs processing. - // - va_start(vaArgP, pcString); - - UARTvprintf(pcString, vaArgP); - - // - // We're finished with the varargs now. - // - va_end(vaArgP); -} - -//***************************************************************************** -// -//! Returns the number of bytes available in the receive buffer. -//! -//! This function, available only when the module is built to operate in -//! buffered mode using \b UART_BUFFERED, may be used to determine the number -//! of bytes of data currently available in the receive buffer. -//! -//! \return Returns the number of available bytes. -// -//***************************************************************************** -#if defined(UART_BUFFERED) || defined(DOXYGEN) -int -UARTRxBytesAvail(void) -{ - return(RX_BUFFER_USED); -} -#endif - -#if defined(UART_BUFFERED) || defined(DOXYGEN) -//***************************************************************************** -// -//! Returns the number of bytes free in the transmit buffer. -//! -//! This function, available only when the module is built to operate in -//! buffered mode using \b UART_BUFFERED, may be used to determine the amount -//! of space currently available in the transmit buffer. -//! -//! \return Returns the number of free bytes. -// -//***************************************************************************** -int -UARTTxBytesFree(void) -{ - return(TX_BUFFER_FREE); -} -#endif - -//***************************************************************************** -// -//! Looks ahead in the receive buffer for a particular character. -//! -//! \param ucChar is the character that is to be searched for. -//! -//! This function, available only when the module is built to operate in -//! buffered mode using \b UART_BUFFERED, may be used to look ahead in the -//! receive buffer for a particular character and report its position if found. -//! It is typically used to determine whether a complete line of user input is -//! available, in which case ucChar should be set to CR ('\\r') which is used -//! as the line end marker in the receive buffer. -//! -//! \return Returns -1 to indicate that the requested character does not exist -//! in the receive buffer. Returns a non-negative number if the character was -//! found in which case the value represents the position of the first instance -//! of \e ucChar relative to the receive buffer read pointer. -// -//***************************************************************************** -#if defined(UART_BUFFERED) || defined(DOXYGEN) -int -UARTPeek(unsigned char ucChar) -{ - int iCount; - int iAvail; - uint32_t ui32ReadIndex; - - // - // How many characters are there in the receive buffer? - // - iAvail = (int)RX_BUFFER_USED; - ui32ReadIndex = g_ui32UARTRxReadIndex; - - // - // Check all the unread characters looking for the one passed. - // - for(iCount = 0; iCount < iAvail; iCount++) - { - if(g_pcUARTRxBuffer[ui32ReadIndex] == ucChar) - { - // - // We found it so return the index - // - return(iCount); - } - else - { - // - // This one didn't match so move on to the next character. - // - ADVANCE_RX_BUFFER_INDEX(ui32ReadIndex); - } - } - - // - // If we drop out of the loop, we didn't find the character in the receive - // buffer. - // - return(-1); -} -#endif - -//***************************************************************************** -// -//! Flushes the receive buffer. -//! -//! This function, available only when the module is built to operate in -//! buffered mode using \b UART_BUFFERED, may be used to discard any data -//! received from the UART but not yet read using UARTgets(). -//! -//! \return None. -// -//***************************************************************************** -#if defined(UART_BUFFERED) || defined(DOXYGEN) -void -UARTFlushRx(void) -{ - uint32_t ui32Int; - - // - // Temporarily turn off interrupts. - // - ui32Int = MAP_IntMasterDisable(); - - // - // Flush the receive buffer. - // - g_ui32UARTRxReadIndex = 0; - g_ui32UARTRxWriteIndex = 0; - - // - // If interrupts were enabled when we turned them off, turn them - // back on again. - // - if(!ui32Int) - { - MAP_IntMasterEnable(); - } -} -#endif - -//***************************************************************************** -// -//! Flushes the transmit buffer. -//! -//! \param bDiscard indicates whether any remaining data in the buffer should -//! be discarded (\b true) or transmitted (\b false). -//! -//! This function, available only when the module is built to operate in -//! buffered mode using \b UART_BUFFERED, may be used to flush the transmit -//! buffer, either discarding or transmitting any data received via calls to -//! UARTprintf() that is waiting to be transmitted. On return, the transmit -//! buffer will be empty. -//! -//! \return None. -// -//***************************************************************************** -#if defined(UART_BUFFERED) || defined(DOXYGEN) -void -UARTFlushTx(bool bDiscard) -{ - uint32_t ui32Int; - - // - // Should the remaining data be discarded or transmitted? - // - if(bDiscard) - { - // - // The remaining data should be discarded, so temporarily turn off - // interrupts. - // - ui32Int = MAP_IntMasterDisable(); - - // - // Flush the transmit buffer. - // - g_ui32UARTTxReadIndex = 0; - g_ui32UARTTxWriteIndex = 0; - - // - // If interrupts were enabled when we turned them off, turn them - // back on again. - // - if(!ui32Int) - { - MAP_IntMasterEnable(); - } - } - else - { - // - // Wait for all remaining data to be transmitted before returning. - // - while(!TX_BUFFER_EMPTY) - { - } - } -} -#endif - -//***************************************************************************** -// -//! Enables or disables echoing of received characters to the transmitter. -//! -//! \param bEnable must be set to \b true to enable echo or \b false to -//! disable it. -//! -//! This function, available only when the module is built to operate in -//! buffered mode using \b UART_BUFFERED, may be used to control whether or not -//! received characters are automatically echoed back to the transmitter. By -//! default, echo is enabled and this is typically the desired behavior if -//! the module is being used to support a serial command line. In applications -//! where this module is being used to provide a convenient, buffered serial -//! interface over which application-specific binary protocols are being run, -//! however, echo may be undesirable and this function can be used to disable -//! it. -//! -//! \return None. -// -//***************************************************************************** -#if defined(UART_BUFFERED) || defined(DOXYGEN) -void -UARTEchoSet(bool bEnable) -{ - g_bDisableEcho = !bEnable; -} -#endif - -//***************************************************************************** -// -//! Handles UART interrupts. -//! -//! This function handles interrupts from the UART. It will copy data from the -//! transmit buffer to the UART transmit FIFO if space is available, and it -//! will copy data from the UART receive FIFO to the receive buffer if data is -//! available. -//! -//! \return None. -// -//***************************************************************************** -#if defined(UART_BUFFERED) || defined(DOXYGEN) -void -UARTStdioIntHandler(void) -{ - uint32_t ui32Ints; - int8_t cChar; - int32_t i32Char; - static bool bLastWasCR = false; - - // - // Get and clear the current interrupt source(s) - // - ui32Ints = MAP_UARTIntStatus(g_ui32Base, true); - MAP_UARTIntClear(g_ui32Base, ui32Ints); - - // - // Are we being interrupted because the TX FIFO has space available? - // - if(ui32Ints & UART_INT_TX) - { - // - // Move as many bytes as we can into the transmit FIFO. - // - UARTPrimeTransmit(g_ui32Base); - - // - // If the output buffer is empty, turn off the transmit interrupt. - // - if(TX_BUFFER_EMPTY) - { - MAP_UARTIntDisable(g_ui32Base, UART_INT_TX); - } - } - - // - // Are we being interrupted due to a received character? - // - if(ui32Ints & (UART_INT_RX | UART_INT_RT)) - { - // - // Get all the available characters from the UART. - // - while(MAP_UARTCharsAvail(g_ui32Base)) - { - // - // Read a character - // - i32Char = MAP_UARTCharGetNonBlocking(g_ui32Base); - cChar = (unsigned char)(i32Char & 0xFF); - - // - // If echo is disabled, we skip the various text filtering - // operations that would typically be required when supporting a - // command line. - // - if(!g_bDisableEcho) - { - // - // Handle backspace by erasing the last character in the - // buffer. - // - if(cChar == '\b') - { - // - // If there are any characters already in the buffer, then - // delete the last. - // - if(!RX_BUFFER_EMPTY) - { - // - // Rub out the previous character on the users - // terminal. - // - UARTwrite("\b \b", 3); - - // - // Decrement the number of characters in the buffer. - // - if(g_ui32UARTRxWriteIndex == 0) - { - g_ui32UARTRxWriteIndex = UART_RX_BUFFER_SIZE - 1; - } - else - { - g_ui32UARTRxWriteIndex--; - } - } - - // - // Skip ahead to read the next character. - // - continue; - } - - // - // If this character is LF and last was CR, then just gobble up - // the character since we already echoed the previous CR and we - // don't want to store 2 characters in the buffer if we don't - // need to. - // - if((cChar == '\n') && bLastWasCR) - { - bLastWasCR = false; - continue; - } - - // - // See if a newline or escape character was received. - // - if((cChar == '\r') || (cChar == '\n') || (cChar == 0x1b)) - { - // - // If the character is a CR, then it may be followed by an - // LF which should be paired with the CR. So remember that - // a CR was received. - // - if(cChar == '\r') - { - bLastWasCR = 1; - } - - // - // Regardless of the line termination character received, - // put a CR in the receive buffer as a marker telling - // UARTgets() where the line ends. We also send an - // additional LF to ensure that the local terminal echo - // receives both CR and LF. - // - cChar = '\r'; - UARTwrite("\n", 1); - } - } - - // - // If there is space in the receive buffer, put the character - // there, otherwise throw it away. - // - if(!RX_BUFFER_FULL) - { - // - // Store the new character in the receive buffer - // - g_pcUARTRxBuffer[g_ui32UARTRxWriteIndex] = - (unsigned char)(i32Char & 0xFF); - ADVANCE_RX_BUFFER_INDEX(g_ui32UARTRxWriteIndex); - - // - // If echo is enabled, write the character to the transmit - // buffer so that the user gets some immediate feedback. - // - if(!g_bDisableEcho) - { - UARTwrite((const char *)&cChar, 1); - } - } - } - - // - // If we wrote anything to the transmit buffer, make sure it actually - // gets transmitted. - // - UARTPrimeTransmit(g_ui32Base); - MAP_UARTIntEnable(g_ui32Base, UART_INT_TX); - } -} -#endif - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - -// -// End of file -// diff --git a/bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.h b/bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.h deleted file mode 100644 index 1176091bbb..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/utils/uartstdio.h +++ /dev/null @@ -1,107 +0,0 @@ -//########################################################################### -// -// FILE: uartstdio.h -// -// TITLE: Prototypes for the UART console functions. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __UARTSTDIO_H__ -#define __UARTSTDIO_H__ - -// -// Included Files -// -#include - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" -{ -#endif - -// -// If built for buffered operation, the following labels define the sizes of -// the transmit and receive buffers respectively. -// -#ifdef UART_BUFFERED -#ifndef UART_RX_BUFFER_SIZE -#define UART_RX_BUFFER_SIZE 128 -#endif -#ifndef UART_TX_BUFFER_SIZE -#define UART_TX_BUFFER_SIZE 1024 -#endif -#endif - -// -// Function Prototypes -// -extern void UARTStdioConfig(uint32_t ui32Port, uint32_t ui32Baud, - uint32_t ui32SrcClock); -extern int UARTgets(char *pcBuf, uint32_t ui32Len); -extern unsigned char UARTgetc(void); -extern void UARTprintf(const char *pcString, ...); -extern void UARTvprintf(const char *pcString, va_list vaArgP); -extern int UARTwrite(const char *pcBuf, uint32_t ui32Len); -#ifdef UART_BUFFERED -extern int UARTPeek(unsigned char ucChar); -extern void UARTFlushTx(bool bDiscard); -extern void UARTFlushRx(void); -extern int UARTRxBytesAvail(void); -extern int UARTTxBytesFree(void); -extern void UARTEchoSet(bool bEnable); -#endif - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif - -#endif // __UARTSTDIO_H__ - -// -// End of file -// diff --git a/bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.c b/bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.c deleted file mode 100644 index 05e0ce7be2..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.c +++ /dev/null @@ -1,1853 +0,0 @@ -//########################################################################### -// -// FILE: ustdlib.c -// -// TITLE: Simple standard library functions. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -// -// Included Files -// -#include -#include -#include "driverlib/debug.h" -#include "utils/ustdlib.h" - -//***************************************************************************** -// -//! \addtogroup ustdlib_api -//! @{ -// -//***************************************************************************** - -// -// Globals -// - -// -// A mapping from an integer between 0 and 15 to its ASCII character -// equivalent. -// -static const char * const g_pcHex = "0123456789abcdef"; - -// -// Functions -// - -//***************************************************************************** -// -//! Copies a certain number of characters from one string to another. -//! -//! \param s1 is a pointer to the destination buffer into which characters -//! are to be copied. -//! \param s2 is a pointer to the string from which characters are to be -//! copied. -//! \param n is the number of characters to copy to the destination buffer. -//! -//! This function copies at most \e n characters from the string pointed to -//! by \e s2 into the buffer pointed to by \e s1. If the end of \e s2 is found -//! before \e n characters have been copied, remaining characters in \e s1 -//! will be padded with zeroes until \e n characters have been written. Note -//! that the destination string will only be NULL terminated if the number of -//! characters to be copied is greater than the length of \e s2. -//! -//! \return Returns \e s1. -// -//***************************************************************************** -char * -ustrncpy(char * restrict s1, const char * restrict s2, size_t n) -{ - size_t count; - - // - // Check the arguments. - // - ASSERT(s1); - ASSERT(s2); - - // - // Start at the beginning of the source string. - // - count = 0; - - // - // Copy the source string until we run out of source characters or - // destination space. - // - while(n && s2[count]) - { - s1[count] = s2[count]; - count++; - n--; - } - - // - // Pad the destination if we are not yet done. - // - while(n) - { - s1[count++] = (char)0; - n--; - } - - // - // Pass the destination pointer back to the caller. - // - return(s1); -} - -//***************************************************************************** -// -//! A simple vsnprintf function supporting \%c, \%d, \%p, \%s, \%u, \%x, and -//! \%X. -//! -//! \param s points to the buffer where the converted string is stored. -//! \param n is the size of the buffer. -//! \param format is the format string. -//! \param arg is the list of optional arguments, which depend on the -//! contents of the format string. -//! -//! This function is very similar to the C library vsnprintf() -//! function. Only the following formatting characters are supported: -//! -//! - \%c to print a character -//! - \%d or \%i to print a decimal value -//! - \%s to print a string -//! - \%u to print an unsigned decimal value -//! - \%x to print a hexadecimal value using lower case letters -//! - \%X to print a hexadecimal value using lower case letters (not upper case -//! letters as would typically be used) -//! - \%p to print a pointer as a hexadecimal value -//! - \%\% to print out a \% character -//! -//! For \%d, \%i, \%p, \%s, \%u, \%x, and \%X, an optional number may reside -//! between the \% and the format character, which specifies the minimum number -//! of characters to use for that value; if preceded by a 0 then the extra -//! characters will be filled with zeros instead of spaces. For example, -//! ``\%8d'' will use eight characters to print the decimal value with spaces -//! added to reach eight; ``\%08d'' will use eight characters as well but will -//! add zeroes instead of spaces. -//! -//! The type of the arguments after \e format must match the requirements of -//! the format string. For example, if an integer was passed where a string -//! was expected, an error of some kind will most likely occur. -//! -//! The \e n parameter limits the number of characters that will be -//! stored in the buffer pointed to by \e s to prevent the possibility of -//! a buffer overflow. The buffer size should be large enough to hold the -//! expected converted output string, including the null termination character. -//! -//! The function will return the number of characters that would be converted -//! as if there were no limit on the buffer size. Therefore it is possible for -//! the function to return a count that is greater than the specified buffer -//! size. If this happens, it means that the output was truncated. -//! -//! \return Returns the number of characters that were to be stored, not -//! including the NULL termination character, regardless of space in the -//! buffer. -// -//***************************************************************************** -int -uvsnprintf(char * restrict s, size_t n, const char * restrict format, - va_list arg) -{ - unsigned long ulIdx, ulValue, ulCount, ulBase, ulNeg; - char *pcStr, cFill; - int iConvertCount = 0; - - // - // Check the arguments. - // - ASSERT(s); - ASSERT(n); - ASSERT(format); - - // - // Adjust buffer size limit to allow one space for null termination. - // - if(n) - { - n--; - } - - // - // Initialize the count of characters converted. - // - iConvertCount = 0; - - // - // Loop while there are more characters in the format string. - // - while(*format) - { - // - // Find the first non-% character, or the end of the string. - // - for(ulIdx = 0; (format[ulIdx] != '%') && (format[ulIdx] != '\0'); - ulIdx++) - { - } - - // - // Write this portion of the string to the output buffer. If there are - // more characters to write than there is space in the buffer, then - // only write as much as will fit in the buffer. - // - if(ulIdx > n) - { - ustrncpy(s, format, n); - s += n; - n = 0; - } - else - { - ustrncpy(s, format, ulIdx); - s += ulIdx; - n -= ulIdx; - } - - // - // Update the conversion count. This will be the number of characters - // that should have been written, even if there was not room in the - // buffer. - // - iConvertCount += ulIdx; - - // - // Skip the portion of the format string that was written. - // - format += ulIdx; - - // - // See if the next character is a %. - // - if(*format == '%') - { - // - // Skip the %. - // - format++; - - // - // Set the digit count to zero, and the fill character to space - // (that is, to the defaults). - // - ulCount = 0; - cFill = ' '; - - // - // It may be necessary to get back here to process more characters. - // Goto's aren't pretty, but effective. I feel extremely dirty for - // using not one but two of the beasts. - // -again: - - // - // Determine how to handle the next character. - // - switch(*format++) - { - // - // Handle the digit characters. - // - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - // - // If this is a zero, and it is the first digit, then the - // fill character is a zero instead of a space. - // - if((format[-1] == '0') && (ulCount == 0)) - { - cFill = '0'; - } - - // - // Update the digit count. - // - ulCount *= 10; - ulCount += format[-1] - '0'; - - // - // Get the next character. - // - goto again; - } - - // - // Handle the %c command. - // - case 'c': - { - // - // Get the value from the varargs. - // - ulValue = va_arg(arg, unsigned long); - - // - // Copy the character to the output buffer, if there is - // room. Update the buffer size remaining. - // - if(n != 0) - { - *s++ = (char)ulValue; - n--; - } - - // - // Update the conversion count. - // - iConvertCount++; - - // - // This command has been handled. - // - break; - } - - // - // Handle the %d and %i commands. - // - case 'd': - case 'i': - { - // - // Get the value from the varargs. - // - ulValue = va_arg(arg, unsigned long); - - // - // If the value is negative, make it positive and indicate - // that a minus sign is needed. - // - if((long)ulValue < 0) - { - // - // Make the value positive. - // - ulValue = -(long)ulValue; - - // - // Indicate that the value is negative. - // - ulNeg = 1; - } - else - { - // - // Indicate that the value is positive so that a - // negative sign isn't inserted. - // - ulNeg = 0; - } - - // - // Set the base to 10. - // - ulBase = 10; - - // - // Convert the value to ASCII. - // - goto convert; - } - - // - // Handle the %s command. - // - case 's': - { - // - // Get the string pointer from the varargs. - // - pcStr = va_arg(arg, char *); - - // - // Determine the length of the string. - // - for(ulIdx = 0; pcStr[ulIdx] != '\0'; ulIdx++) - { - } - - // - // Update the convert count to include any padding that - // should be necessary (regardless of whether we have space - // to write it or not). - // - if(ulCount > ulIdx) - { - iConvertCount += (ulCount - ulIdx); - } - - // - // Copy the string to the output buffer. Only copy as much - // as will fit in the buffer. Update the output buffer - // pointer and the space remaining. - // - if(ulIdx > n) - { - ustrncpy(s, pcStr, n); - s += n; - n = 0; - } - else - { - ustrncpy(s, pcStr, ulIdx); - s += ulIdx; - n -= ulIdx; - - // - // Write any required padding spaces assuming there is - // still space in the buffer. - // - if(ulCount > ulIdx) - { - ulCount -= ulIdx; - if(ulCount > n) - { - ulCount = n; - } - n = -ulCount; - - while(ulCount--) - { - *s++ = ' '; - } - } - } - - // - // Update the conversion count. This will be the number of - // characters that should have been written, even if there - // was not room in the buffer. - // - iConvertCount += ulIdx; - - // - // This command has been handled. - // - break; - } - - // - // Handle the %u command. - // - case 'u': - { - // - // Get the value from the varargs. - // - ulValue = va_arg(arg, unsigned long); - - // - // Set the base to 10. - // - ulBase = 10; - - // - // Indicate that the value is positive so that a minus sign - // isn't inserted. - // - ulNeg = 0; - - // - // Convert the value to ASCII. - // - goto convert; - } - - // - // Handle the %x and %X commands. Note that they are treated - // identically; that is, %X will use lower case letters for a-f - // instead of the upper case letters is should use. We also - // alias %p to %x. - // - case 'x': - case 'X': - case 'p': - { - // - // Get the value from the varargs. - // - ulValue = va_arg(arg, unsigned long); - - // - // Set the base to 16. - // - ulBase = 16; - - // - // Indicate that the value is positive so that a minus sign - // isn't inserted. - // - ulNeg = 0; - - // - // Determine the number of digits in the string version of - // the value. - // -convert: - for(ulIdx = 1; - (((ulIdx * ulBase) <= ulValue) && - (((ulIdx * ulBase) / ulBase) == ulIdx)); - ulIdx *= ulBase, ulCount--) - { - } - - // - // If the value is negative, reduce the count of padding - // characters needed. - // - if(ulNeg) - { - ulCount--; - } - - // - // If the value is negative and the value is padded with - // zeros, then place the minus sign before the padding. - // - if(ulNeg && (n != 0) && (cFill == '0')) - { - // - // Place the minus sign in the output buffer. - // - *s++ = '-'; - n--; - - // - // Update the conversion count. - // - iConvertCount++; - - // - // The minus sign has been placed, so turn off the - // negative flag. - // - ulNeg = 0; - } - - // - // See if there are more characters in the specified field - // width than there are in the conversion of this value. - // - if((ulCount > 1) && (ulCount < 65536)) - { - // - // Loop through the required padding characters. - // - for(ulCount--; ulCount; ulCount--) - { - // - // Copy the character to the output buffer if there - // is room. - // - if(n != 0) - { - *s++ = cFill; - n--; - } - - // - // Update the conversion count. - // - iConvertCount++; - } - } - - // - // If the value is negative, then place the minus sign - // before the number. - // - if(ulNeg && (n != 0)) - { - // - // Place the minus sign in the output buffer. - // - *s++ = '-'; - n--; - - // - // Update the conversion count. - // - iConvertCount++; - } - - // - // Convert the value into a string. - // - for(; ulIdx; ulIdx /= ulBase) - { - // - // Copy the character to the output buffer if there is - // room. - // - if(n != 0) - { - *s++ = g_pcHex[(ulValue / ulIdx) % ulBase]; - n--; - } - - // - // Update the conversion count. - // - iConvertCount++; - } - - // - // This command has been handled. - // - break; - } - - // - // Handle the %% command. - // - case '%': - { - // - // Simply write a single %. - // - if(n != 0) - { - *s++ = format[-1]; - n--; - } - - // - // Update the conversion count. - // - iConvertCount++; - - // - // This command has been handled. - // - break; - } - - // - // Handle all other commands. - // - default: - { - // - // Indicate an error. - // - if(n >= 5) - { - ustrncpy(s, "ERROR", 5); - s += 5; - n -= 5; - } - else - { - ustrncpy(s, "ERROR", n); - s += n; - n = 0; - } - - // - // Update the conversion count. - // - iConvertCount += 5; - - // - // This command has been handled. - // - break; - } - } - } - } - - // - // Null terminate the string in the buffer. - // - *s = 0; - - // - // Return the number of characters in the full converted string. - // - return(iConvertCount); -} - -//***************************************************************************** -// -//! A simple sprintf function supporting \%c, \%d, \%p, \%s, \%u, \%x, and \%X. -//! -//! \param s is the buffer where the converted string is stored. -//! \param format is the format string. -//! \param ... are the optional arguments, which depend on the contents of the -//! format string. -//! -//! This function is very similar to the C library sprintf() function. -//! Only the following formatting characters are supported: -//! -//! - \%c to print a character -//! - \%d or \%i to print a decimal value -//! - \%s to print a string -//! - \%u to print an unsigned decimal value -//! - \%x to print a hexadecimal value using lower case letters -//! - \%X to print a hexadecimal value using lower case letters (not upper case -//! letters as would typically be used) -//! - \%p to print a pointer as a hexadecimal value -//! - \%\% to print out a \% character -//! -//! For \%d, \%i, \%p, \%s, \%u, \%x, and \%X, an optional number may reside -//! between the \% and the format character, which specifies the minimum number -//! of characters to use for that value; if preceded by a 0 then the extra -//! characters will be filled with zeros instead of spaces. For example, -//! ``\%8d'' will use eight characters to print the decimal value with spaces -//! added to reach eight; ``\%08d'' will use eight characters as well but will -//! add zeros instead of spaces. -//! -//! The type of the arguments after \e format must match the requirements of -//! the format string. For example, if an integer was passed where a string -//! was expected, an error of some kind will most likely occur. -//! -//! The caller must ensure that the buffer \e s is large enough to hold the -//! entire converted string, including the null termination character. -//! -//! \return Returns the count of characters that were written to the output -//! buffer, not including the NULL termination character. -// -//***************************************************************************** -int -usprintf(char * restrict s, const char *format, ...) -{ - va_list arg; - int ret; - - // - // Start the varargs processing. - // - va_start(arg, format); - - // - // Call vsnprintf to perform the conversion. Use a large number for the - // buffer size. - // - ret = uvsnprintf(s, 0xffff, format, arg); - - // - // End the varargs processing. - // - va_end(arg); - - // - // Return the conversion count. - // - return(ret); -} - -//***************************************************************************** -// -//! A simple snprintf function supporting \%c, \%d, \%p, \%s, \%u, \%x, and -//! \%X. -//! -//! \param s is the buffer where the converted string is stored. -//! \param n is the size of the buffer. -//! \param format is the format string. -//! \param ... are the optional arguments, which depend on the contents of the -//! format string. -//! -//! This function is very similar to the C library sprintf() function. -//! Only the following formatting characters are supported: -//! -//! - \%c to print a character -//! - \%d or \%i to print a decimal value -//! - \%s to print a string -//! - \%u to print an unsigned decimal value -//! - \%x to print a hexadecimal value using lower case letters -//! - \%X to print a hexadecimal value using lower case letters (not upper case -//! letters as would typically be used) -//! - \%p to print a pointer as a hexadecimal value -//! - \%\% to print out a \% character -//! -//! For \%d, \%i, \%p, \%s, \%u, \%x, and \%X, an optional number may reside -//! between the \% and the format character, which specifies the minimum number -//! of characters to use for that value; if preceded by a 0 then the extra -//! characters will be filled with zeros instead of spaces. For example, -//! ``\%8d'' will use eight characters to print the decimal value with spaces -//! added to reach eight; ``\%08d'' will use eight characters as well but will -//! add zeros instead of spaces. -//! -//! The type of the arguments after \e format must match the requirements of -//! the format string. For example, if an integer was passed where a string -//! was expected, an error of some kind will most likely occur. -//! -//! The function will copy at most \e n - 1 characters into the buffer -//! \e s. One space is reserved in the buffer for the null termination -//! character. -//! -//! The function will return the number of characters that would be converted -//! as if there were no limit on the buffer size. Therefore it is possible for -//! the function to return a count that is greater than the specified buffer -//! size. If this happens, it means that the output was truncated. -//! -//! \return Returns the number of characters that were to be stored, not -//! including the NULL termination character, regardless of space in the -//! buffer. -// -//***************************************************************************** -int -usnprintf(char * restrict s, size_t n, const char * restrict format, ...) -{ - va_list arg; - int ret; - - // - // Start the varargs processing. - // - va_start(arg, format); - - // - // Call vsnprintf to perform the conversion. - // - ret = uvsnprintf(s, n, format, arg); - - // - // End the varargs processing. - // - va_end(arg); - - // - // Return the conversion count. - // - return(ret); -} - - -// -// This array contains the number of days in a year at the beginning of each -// month of the year, in a non-leap year. -// -static const time_t g_psDaysToMonth[12] = -{ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 -}; - -//***************************************************************************** -// -//! Converts from seconds to calendar date and time. -//! -//! \param timer is the number of seconds. -//! \param tm is a pointer to the time structure that is filled in with the -//! broken down date and time. -//! -//! This function converts a number of seconds since midnight GMT on January 1, -//! 1970 (traditional Unix epoch) into the equivalent month, day, year, hours, -//! minutes, and seconds representation. -//! -//! \return None. -// -//***************************************************************************** -void -ulocaltime(time_t timer, struct tm *tm) -{ - time_t temp, months; - - // - // Extract the number of seconds, converting time to the number of minutes. - // - temp = timer / 60; - tm->tm_sec = timer - (temp * 60); - timer = temp; - - // - // Extract the number of minutes, converting time to the number of hours. - // - temp = timer / 60; - tm->tm_min = timer - (temp * 60); - timer = temp; - - // - // Extract the number of hours, converting time to the number of days. - // - temp = timer / 24; - tm->tm_hour = timer - (temp * 24); - timer = temp; - - // - // Compute the day of the week. - // - tm->tm_wday = (timer + 4) % 7; - - // - // Compute the number of leap years that have occurred since 1968, the - // first leap year before 1970. For the beginning of a leap year, cut the - // month loop below at March so that the leap day is classified as February - // 29 followed by March 1, instead of March 1 followed by another March 1. - // - timer += 366 + 365; - temp = timer / ((4 * 365) + 1); - if((timer - (temp * ((4 * 365) + 1))) > (31 + 28)) - { - temp++; - months = 12; - } - else - { - months = 2; - } - - // - // Extract the year. - // - tm->tm_year = ((timer - temp) / 365) + 68; - timer -= ((tm->tm_year - 68) * 365) + temp; - - // - // Extract the month. - // - for(temp = 0; temp < months; temp++) - { - if(g_psDaysToMonth[temp] > timer) - { - break; - } - } - tm->tm_mon = temp - 1; - - // - // Extract the day of the month. - // - tm->tm_mday = timer - g_psDaysToMonth[temp - 1] + 1; -} - -//***************************************************************************** -// -//! Compares two time structures and determines if one is greater than, -//! less than, or equal to the other. -//! -//! \param t1 is the first time structure to compare. -//! \param t2 is the second time structure to compare. -//! -//! This function compares two time structures and returns a signed number -//! to indicate the result of the comparison. If the time represented by -//! \e t1 is greater than the time represented by \e t2 then a positive -//! number is returned. Likewise if \e t1 is less than \e t2 then a -//! negative number is returned. If the two times are equal then the function -//! returns 0. -//! -//! \return Returns 0 if the two times are equal, +1 if \e t1 is greater -//! than \e t2, and -1 if \e t1 is less than \e t2. -// -//***************************************************************************** -static int -ucmptime(struct tm *t1, struct tm *t2) -{ - // - // Compare each field in descending significance to determine if - // greater than, less than, or equal. - // - if(t1->tm_year > t2->tm_year) - { - return(1); - } - else if(t1->tm_year < t2->tm_year) - { - return(-1); - } - else if(t1->tm_mon > t2->tm_mon) - { - return(1); - } - else if(t1->tm_mon < t2->tm_mon) - { - return(-1); - } - else if(t1->tm_mday > t2->tm_mday) - { - return(1); - } - else if(t1->tm_mday < t2->tm_mday) - { - return(-1); - } - else if(t1->tm_hour > t2->tm_hour) - { - return(1); - } - else if(t1->tm_hour < t2->tm_hour) - { - return(-1); - } - else if(t1->tm_min > t2->tm_min) - { - return(1); - } - else if(t1->tm_min < t2->tm_min) - { - return(-1); - } - else if(t1->tm_sec > t2->tm_sec) - { - return(1); - } - else if(t1->tm_sec < t2->tm_sec) - { - return(-1); - } - else - { - // - // Reaching this branch of the conditional means that all of the - // fields are equal, and thus the two times are equal. - // - return(0); - } -} - -//***************************************************************************** -// -//! Converts calendar date and time to seconds. -//! -//! \param timeptr is a pointer to the time structure that is filled in with -//! the broken down date and time. -//! -//! This function converts the date and time represented by the \e timeptr -//! structure pointer to the number of seconds since midnight GMT on January 1, -//! 1970 (traditional Unix epoch). -//! -//! \return Returns the calendar time and date as seconds. If the conversion -//! was not possible then the function returns (uint32_t)(-1). -// -//***************************************************************************** -time_t -umktime(struct tm *timeptr) -{ - struct tm sTimeGuess; - unsigned long ulTimeGuess = 0x80000000; - unsigned long ulAdjust = 0x40000000; - int iSign; - - // - // Seed the binary search with the first guess. - // - ulocaltime(ulTimeGuess, &sTimeGuess); - iSign = ucmptime(timeptr, &sTimeGuess); - - // - // While the time is not yet found, execute a binary search. - // - while(iSign && ulAdjust) - { - // - // Adjust the time guess up or down depending on the result of the - // last compare. - // - ulTimeGuess = ((iSign > 0) ? (ulTimeGuess + ulAdjust) : - (ulTimeGuess - ulAdjust)); - ulAdjust /= 2; - - // - // Compare the new time guess against the time pointed at by the - // function parameters. - // - ulocaltime(ulTimeGuess, &sTimeGuess); - iSign = ucmptime(timeptr, &sTimeGuess); - } - - // - // If the above loop was exited with iSign == 0, that means that the - // time in seconds was found, so return that value to the caller. - // - if(iSign == 0) - { - return(ulTimeGuess); - } - - // - // Otherwise the time could not be converted so return an error. - // - else - { - return((unsigned long)-1); - } -} - -//***************************************************************************** -// -//! Converts a string into its numeric equivalent. -//! -//! \param nptr is a pointer to the string containing the integer. -//! \param endptr is a pointer that will be set to the first character past -//! the integer in the string. -//! \param base is the radix to use for the conversion; can be zero to -//! auto-select the radix or between 2 and 16 to explicitly specify the radix. -//! -//! This function is very similar to the C library strtoul() function. -//! It scans a string for the first token (that is, non-white space) and -//! converts the value at that location in the string into an integer value. -//! -//! \return Returns the result of the conversion. -// -//***************************************************************************** -unsigned long -ustrtoul(const char * restrict nptr, const char ** restrict endptr, int base) -{ - unsigned long ulRet, ulDigit, ulNeg, ulValid; - const char *pcPtr; - - // - // Check the arguments. - // - ASSERT(nptr); - ASSERT((base == 0) || ((base > 1) && (base <= 16))); - - // - // Initially, the result is zero. - // - ulRet = 0; - ulNeg = 0; - ulValid = 0; - - // - // Skip past any leading white space. - // - pcPtr = nptr; - while((*pcPtr == ' ') || (*pcPtr == '\t')) - { - pcPtr++; - } - - // - // Take a leading + or - from the value. - // - if(*pcPtr == '-') - { - ulNeg = 1; - pcPtr++; - } - else if(*pcPtr == '+') - { - pcPtr++; - } - - // - // See if the radix was not specified, or is 16, and the value starts with - // "0x" or "0X" (to indicate a hex value). - // - if(((base == 0) || (base == 16)) && (*pcPtr == '0') && - ((pcPtr[1] == 'x') || (pcPtr[1] == 'X'))) - { - // - // Skip the leading "0x". - // - pcPtr += 2; - - // - // Set the radix to 16. - // - base = 16; - } - - // - // See if the radix was not specified. - // - if(base == 0) - { - // - // See if the value starts with "0". - // - if(*pcPtr == '0') - { - // - // Values that start with "0" are assumed to be radix 8. - // - base = 8; - } - else - { - // - // Otherwise, the values are assumed to be radix 10. - // - base = 10; - } - } - - // - // Loop while there are more valid digits to consume. - // - while(1) - { - // - // See if this character is a number. - // - if((*pcPtr >= '0') && (*pcPtr <= '9')) - { - // - // Convert the character to its integer equivalent. - // - ulDigit = *pcPtr++ - '0'; - } - - // - // Otherwise, see if this character is an upper case letter. - // - else if((*pcPtr >= 'A') && (*pcPtr <= 'Z')) - { - // - // Convert the character to its integer equivalent. - // - ulDigit = *pcPtr++ - 'A' + 10; - } - - // - // Otherwise, see if this character is a lower case letter. - // - else if((*pcPtr >= 'a') && (*pcPtr <= 'z')) - { - // - // Convert the character to its integer equivalent. - // - ulDigit = *pcPtr++ - 'a' + 10; - } - - // - // Otherwise, this is not a valid character. - // - else - { - // - // Stop converting this value. - // - break; - } - - // - // See if this digit is valid for the chosen radix. - // - if(ulDigit >= base) - { - // - // Since this was not a valid digit, move the pointer back to the - // character that therefore should not have been consumed. - // - pcPtr--; - - // - // Stop converting this value. - // - break; - } - - // - // Add this digit to the converted value. - // - ulRet *= base; - ulRet += ulDigit; - - // - // Since a digit has been added, this is now a valid result. - // - ulValid = 1; - } - - // - // Set the return string pointer to the first character not consumed. - // - if(endptr) - { - *endptr = ulValid ? pcPtr : nptr; - } - - // - // Return the converted value. - // - return(ulNeg ? (0 - ulRet) : ulRet); -} - -// -// An array of the value of ten raised to the power-of-two exponents. This is -// used for converting the decimal exponent into the floating-point value of -// 10^exp. -// -static const float g_pfExponents[] = -{ - 1.0e+01, - 1.0e+02, - 1.0e+04, - 1.0e+08, - 1.0e+16, - 1.0e+32, -}; - -//***************************************************************************** -// -//! Converts a string into its floating-point equivalent. -//! -//! \param nptr is a pointer to the string containing the floating-point -//! value. -//! \param endptr is a pointer that will be set to the first character past -//! the floating-point value in the string. -//! -//! This function is very similar to the C library strtof() function. -//! It scans a string for the first token (that is, non-white space) and -//! converts the value at that location in the string into a floating-point -//! value. -//! -//! \return Returns the result of the conversion. -// -//***************************************************************************** -float -ustrtof(const char *nptr, const char **endptr) -{ - unsigned long ulNeg, ulExp, ulExpNeg, ulValid, ulIdx; - float fRet, fDigit, fExp; - const char *pcPtr; - - // - // Check the arguments. - // - ASSERT(nptr); - - // - // Initially, the result is zero. - // - fRet = 0; - ulNeg = 0; - ulValid = 0; - - // - // Skip past any leading white space. - // - pcPtr = nptr; - while((*pcPtr == ' ') || (*pcPtr == '\t')) - { - pcPtr++; - } - - // - // Take a leading + or - from the value. - // - if(*pcPtr == '-') - { - ulNeg = 1; - pcPtr++; - } - else if(*pcPtr == '+') - { - pcPtr++; - } - - // - // Loop while there are valid digits to consume. - // - while((*pcPtr >= '0') && (*pcPtr <= '9')) - { - // - // Add this digit to the converted value. - // - fRet *= 10; - fRet += *pcPtr++ - '0'; - - // - // Since a digit has been added, this is now a valid result. - // - ulValid = 1; - } - - // - // See if the next character is a period and the character after that is a - // digit, indicating the start of the fractional portion of the value. - // - if((*pcPtr == '.') && (pcPtr[1] >= '0') && (pcPtr[1] <= '9')) - { - // - // Skip the period. - // - pcPtr++; - - // - // Loop while there are valid fractional digits to consume. - // - fDigit = 0.1; - while((*pcPtr >= '0') && (*pcPtr <= '9')) - { - // - // Add this digit to the converted value. - // - fRet += (*pcPtr++ - '0') * fDigit; - fDigit /= (float)10.0; - - // - // Since a digit has been added, this is now a valid result. - // - ulValid = 1; - } - } - - // - // See if the next character is an "e" and a valid number has been - // converted, indicating the start of the exponent. - // - if(((pcPtr[0] == 'e') || (pcPtr[0] == 'E')) && (ulValid == 1) && - (((pcPtr[1] >= '0') && (pcPtr[1] <= '9')) || - (((pcPtr[1] == '+') || (pcPtr[1] == '-')) && - (pcPtr[2] >= '0') && (pcPtr[2] <= '9')))) - { - // - // Skip the "e". - // - pcPtr++; - - // - // Take a leading + or - from the exponent. - // - ulExpNeg = 0; - if(*pcPtr == '-') - { - ulExpNeg = 1; - pcPtr++; - } - else if(*pcPtr == '+') - { - pcPtr++; - } - - // - // Loop while there are valid digits in the exponent. - // - ulExp = 0; - while((*pcPtr >= '0') && (*pcPtr <= '9')) - { - // - // Add this digit to the converted value. - // - ulExp *= 10; - ulExp += *pcPtr++ - '0'; - } - - // - // Raise ten to the power of the exponent. Do this via binary - // decomposition; for each binary bit set in the exponent, multiply the - // floating-point representation by ten raised to that binary value - // (extracted from the table above). - // - fExp = 1; - for(ulIdx = 0; ulIdx < 7; ulIdx++) - { - if(ulExp & (1 << ulIdx)) - { - fExp *= g_pfExponents[ulIdx]; - } - } - - // - // If the exponent is negative, then the exponent needs to be inverted. - // - if(ulExpNeg == 1) - { - fExp = 1 / fExp; - } - - // - // Multiply the result by the computed exponent value. - // - fRet *= fExp; - } - - // - // Set the return string pointer to the first character not consumed. - // - if(endptr) - { - *endptr = ulValid ? pcPtr : nptr; - } - - // - // Return the converted value. - // - return(ulNeg ? (0 - fRet) : fRet); -} - -//***************************************************************************** -// -//! Returns the length of a null-terminated string. -//! -//! \param s is a pointer to the string whose length is to be found. -//! -//! This function is very similar to the C library strlen() function. -//! It determines the length of the null-terminated string passed and returns -//! this to the caller. -//! -//! This implementation assumes that single byte character strings are passed -//! and will return incorrect values if passed some UTF-8 strings. -//! -//! \return Returns the length of the string pointed to by \e s. -// -//***************************************************************************** -size_t -ustrlen(const char *s) -{ - size_t len; - - // - // Check the arguments. - // - ASSERT(s); - - // - // Initialize the length. - // - len = 0; - - // - // Step through the string looking for a zero character (marking its end). - // - while(s[len]) - { - // - // Zero not found so move on to the next character. - // - len++; - } - - return(len); -} - -//***************************************************************************** -// -//! Finds a substring within a string. -//! -//! \param s1 is a pointer to the string that will be searched. -//! \param s2 is a pointer to the substring that is to be found within -//! \e s1. -//! -//! This function is very similar to the C library strstr() function. -//! It scans a string for the first instance of a given substring and returns -//! a pointer to that substring. If the substring cannot be found, a NULL -//! pointer is returned. -//! -//! \return Returns a pointer to the first occurrence of \e s2 within -//! \e s1 or NULL if no match is found. -// -//***************************************************************************** -char * -ustrstr(const char *s1, const char *s2) -{ - size_t n; - - // - // Get the length of the string to be found. - // - n = ustrlen(s2); - - // - // Loop while we have not reached the end of the string. - // - while(*s1) - { - // - // Check to see if the substring appears at this position. - // - if(ustrncmp(s2, s1, n) == 0) - { - // - // It does so return the pointer. - // - return((char *)s1); - } - - // - // Move to the next position in the string being searched. - // - s1++; - } - - // - // We reached the end of the string without finding the substring so - // return NULL. - // - return((char *)0); -} - -//***************************************************************************** -// -//! Compares two strings without regard to case. -//! -//! \param s1 points to the first string to be compared. -//! \param s2 points to the second string to be compared. -//! \param n is the maximum number of characters to compare. -//! -//! This function is very similar to the C library strncasecmp() -//! function. It compares at most \e n characters of two strings without -//! regard to case. The comparison ends if a terminating NULL character is -//! found in either string before \e n characters are compared. In this case, -//! the shorter string is deemed the lesser. -//! -//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less -//! than \e s2 and 1 if \e s1 is greater than \e s2. -// -//***************************************************************************** -int -ustrncasecmp(const char *s1, const char *s2, size_t n) -{ - char c1, c2; - - // - // Loop while there are more characters to compare. - // - while(n) - { - // - // If we reached a NULL in both strings, they must be equal so - // we end the comparison and return 0 - // - if(!*s1 && !*s2) - { - return(0); - } - - // - // Lower case the characters at the current position before we compare. - // - c1 = (((*s1 >= 'A') && (*s1 <= 'Z')) ? (*s1 + ('a' - 'A')) : *s1); - c2 = (((*s2 >= 'A') && (*s2 <= 'Z')) ? (*s2 + ('a' - 'A')) : *s2); - - // - // Compare the two characters and, if different, return the relevant - // return code. - // - if(c2 < c1) - { - return(1); - } - if(c1 < c2) - { - return(-1); - } - - // - // Move on to the next character. - // - s1++; - s2++; - n--; - } - - // - // If we fall out, the strings must be equal for at least the first n - // characters so return 0 to indicate this. - // - return(0); -} - -//***************************************************************************** -// -//! Compares two strings without regard to case. -//! -//! \param s1 points to the first string to be compared. -//! \param s2 points to the second string to be compared. -//! -//! This function is very similar to the C library strcasecmp() -//! function. It compares two strings without regard to case. The comparison -//! ends if a terminating NULL character is found in either string. In this -//! case, the int16_ter string is deemed the lesser. -//! -//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less -//! than \e s2 and 1 if \e s1 is greater than \e s2. -// -//***************************************************************************** -int -ustrcasecmp(const char *s1, const char *s2) -{ - // - // Just let ustrncasecmp() handle this. - // - return(ustrncasecmp(s1, s2, (size_t)-1)); -} - -//***************************************************************************** -// -//! Compares two strings. -//! -//! \param s1 points to the first string to be compared. -//! \param s2 points to the second string to be compared. -//! \param n is the maximum number of characters to compare. -//! -//! This function is very similar to the C library strncmp() function. -//! It compares at most \e n characters of two strings taking case into -//! account. The comparison ends if a terminating NULL character is found in -//! either string before \e n characters are compared. In this case, the -//! int16_ter string is deemed the lesser. -//! -//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less -//! than \e s2 and 1 if \e s1 is greater than \e s2. -// -//***************************************************************************** -int -ustrncmp(const char *s1, const char *s2, size_t n) -{ - // - // Loop while there are more characters. - // - while(n) - { - // - // If we reached a NULL in both strings, they must be equal so we end - // the comparison and return 0 - // - if(!*s1 && !*s2) - { - return(0); - } - - // - // Compare the two characters and, if different, return the relevant - // return code. - // - if(*s2 < *s1) - { - return(1); - } - if(*s1 < *s2) - { - return(-1); - } - - // - // Move on to the next character. - // - s1++; - s2++; - n--; - } - - // - // If we fall out, the strings must be equal for at least the first n - // characters so return 0 to indicate this. - // - return(0); -} - -//***************************************************************************** -// -//! Compares two strings. -//! -//! \param s1 points to the first string to be compared. -//! \param s2 points to the second string to be compared. -//! -//! This function is very similar to the C library strcmp() -//! function. It compares two strings, taking case into account. The -//! comparison ends if a terminating NULL character is found in either string. -//! In this case, the int16_ter string is deemed the lesser. -//! -//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less -//! than \e s2 and 1 if \e s1 is greater than \e s2. -// -//***************************************************************************** -int -ustrcmp(const char *s1, const char *s2) -{ - // - // Pass this on to ustrncmp. - // - return(ustrncmp(s1, s2, (size_t)-1)); -} - -// -// Random Number Generator Seed Value -// -static unsigned int g_iRandomSeed = 1; - -//***************************************************************************** -// -//! Set the random number generator seed. -//! -//! \param seed is the new seed value to use for the random number -//! generator. -//! -//! This function is very similar to the C library srand() function. -//! It will set the seed value used in the urand() function. -//! -//! \return None -// -//***************************************************************************** -void -usrand(unsigned int seed) -{ - g_iRandomSeed = seed; -} - -//***************************************************************************** -// -//! Generate a new (pseudo) random number -//! -//! This function is very similar to the C library rand() function. -//! It will generate a pseudo-random number sequence based on the seed value. -//! -//! \return A pseudo-random number will be returned. -// -//***************************************************************************** -int -urand(void) -{ - // - // Generate a new pseudo-random number with a linear congruence random - // number generator. This new random number becomes the seed for the next - // random number. - // - g_iRandomSeed = (g_iRandomSeed * 1664525) + 1013904223; - - // - // Return the new random number. - // - return((int)g_iRandomSeed); -} - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - -// -// End of file -// diff --git a/bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.h b/bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.h deleted file mode 100644 index 2cb92ed3a1..0000000000 --- a/bsp/tms320f28379d/libraries/common/deprecated/utils/ustdlib.h +++ /dev/null @@ -1,96 +0,0 @@ -//########################################################################### -// -// FILE: ustdlib.h -// -// TITLE: Prototypes for simple standard library functions. -// -//########################################################################### -// $TI Release: F2837xD Support Library v3.05.00.00 $ -// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $ -// $Copyright: -// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// $ -//########################################################################### - -#ifndef __USTDLIB_H__ -#define __USTDLIB_H__ - -// -// Included Files -// -#include -#include - -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -#ifdef __cplusplus -extern "C" -{ -#endif - -// -// Function Prototypes -// -extern void ulocaltime(time_t timer, struct tm *tm); -extern time_t umktime(struct tm *timeptr); -extern int urand(void); -extern int usnprintf(char * restrict s, size_t n, const char * restrict format, - ...); -extern int usprintf(char * restrict s, const char * restrict format, ...); -extern void usrand(unsigned int seed); -extern int ustrcasecmp(const char *s1, const char *s2); -extern int ustrcmp(const char *s1, const char *s2); -extern size_t ustrlen(const char *s); -extern int ustrncasecmp(const char *s1, const char *s2, size_t n); -extern int ustrncmp(const char *s1, const char *s2, size_t n); -extern char *ustrncpy(char * restrict s1, const char * restrict s2, size_t n); -extern char *ustrstr(const char *s1, const char *s2); -extern float ustrtof(const char * restrict nptr, - const char ** restrict endptr); -extern unsigned long int ustrtoul(const char * restrict nptr, - const char ** restrict endptr, int base); -extern int uvsnprintf(char * restrict s, size_t n, - const char * restrict format, va_list arg); - -// -// Mark the end of the C bindings section for C++ compilers. -// -#ifdef __cplusplus -} -#endif - -#endif // __USTDLIB_H__ - -// -// End of file -// diff --git a/bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28377D.ccxml b/bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28377D.ccxml deleted file mode 100644 index 79dd5cc44e..0000000000 --- a/bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28377D.ccxml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28379D.ccxml b/bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28379D.ccxml deleted file mode 100644 index bd5fa49893..0000000000 --- a/bsp/tms320f28379d/libraries/common/targetConfigs/TMS320F28379D.ccxml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -- GitLab