Other Parts Discussed in Thread: SYSCONFIG
System Setup:
AM2432
SDK mcu_plus_sdk_am243x_08_04_00_17
Sysconfig 1.14
CCS 12.1.0.00007
Hello,
I'm trying to set up an interrupt triggered by pin PRG0_PRU0_GPO0 (GPIO1_0) on pin Y1 in the main domain. The ISR must be serviced by R5FSS1_CORE0. When I configured the GPIO pin to service the interrupt, sysconfig generated the following file (ti_drivers_config.c) that contains the code to set up the interrupt. However, when Sciclient_gpioIrqSet() is called in ti_drivers_config.c the call to Sciclient_rmIrqSet() fails.
Attached is my example.syscfg and ti_drivers_config.c files:
/* * Copyright (C) 2021 Texas Instruments Incorporated * * 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. */ /* * Auto generated file */ #include "ti_drivers_config.h" #include <drivers/sciclient.h> /* * OSPI */ /* Regions restricted for DMA. We should use CPU memcpy in these cases */ static OSPI_AddrRegion gOspiDmaRestrictRegions[] = { { .regionStartAddr = CSL_R5FSS0_ATCM_BASE, .regionSize = CSL_R5FSS0_ATCM_SIZE, }, { .regionStartAddr = CSL_MCU_M4FSS0_IRAM_BASE, .regionSize = CSL_MCU_M4FSS0_IRAM_SIZE, }, { .regionStartAddr = CSL_MCU_M4FSS0_DRAM_BASE, .regionSize = CSL_MCU_M4FSS0_DRAM_SIZE, }, { .regionStartAddr = 0xFFFFFFFFU, .regionSize = 0U, } }; /* OSPI attributes */ static OSPI_Attrs gOspiAttrs[CONFIG_OSPI_NUM_INSTANCES] = { { .baseAddr = CSL_FSS0_OSPI0_CTRL_BASE, .dataBaseAddr = CSL_FSS0_DAT_REG1_BASE, .inputClkFreq = 200000000U, .intrNum = 171U, .intrEnable = FALSE, .intrPriority = 4U, .dmaEnable = TRUE, .phyEnable = FALSE, .dacEnable = FALSE, .chipSelect = OSPI_CS0, .frmFmt = OSPI_FF_POL0_PHA0, .decChipSelect = OSPI_DECODER_SELECT4, .baudRateDiv = 4, .dmaRestrictedRegions = gOspiDmaRestrictRegions, }, }; /* OSPI objects - initialized by the driver */ static OSPI_Object gOspiObjects[CONFIG_OSPI_NUM_INSTANCES]; /* OSPI driver configuration */ OSPI_Config gOspiConfig[CONFIG_OSPI_NUM_INSTANCES] = { { &gOspiAttrs[CONFIG_OSPI0], &gOspiObjects[CONFIG_OSPI0], }, }; uint32_t gOspiConfigNum = CONFIG_OSPI_NUM_INSTANCES; #include <drivers/ospi/v0/dma/ospi_dma.h> #include <drivers/ospi/v0/dma/udma/ospi_dma_udma.h> #include <drivers/udma.h> /* * OSPI UDMA Blockcopy Parameters */ #define OSPI_UDMA_BLK_COPY_CH_RING_ELEM_CNT (1U) #define OSPI_UDMA_BLK_COPY_CH_RING_MEM_SIZE (((OSPI_UDMA_BLK_COPY_CH_RING_ELEM_CNT * 8U) + UDMA_CACHELINE_ALIGNMENT) & ~(UDMA_CACHELINE_ALIGNMENT - 1U)) #define OSPI_UDMA_BLK_COPY_CH_TRPD_MEM_SIZE (UDMA_GET_TRPD_TR15_SIZE(1U)) #define OSPI_UDMA_NUM_BLKCOPY_CH (1U) /* OSPI UDMA Blockcopy Channel Objects */ static Udma_ChObject gOspiUdmaBlkCopyChObj[OSPI_UDMA_NUM_BLKCOPY_CH]; /* OSPI UDMA Blockcopy Channel Ring Mem */ static uint8_t gOspiUdmaBlkCopyCh0RingMem[OSPI_UDMA_BLK_COPY_CH_RING_MEM_SIZE] __attribute__((aligned(UDMA_CACHELINE_ALIGNMENT))); /* OSPI UDMA Blockcopy Channel TRPD Mem */ static uint8_t gOspiUdmaBlkCopyCh0TrpdMem[OSPI_UDMA_BLK_COPY_CH_TRPD_MEM_SIZE] __attribute__((aligned(UDMA_CACHELINE_ALIGNMENT))); OspiDma_UdmaArgs gOspiUdma0Args = { .drvHandle = &gUdmaDrvObj[CONFIG_UDMA0], .chHandle = &gOspiUdmaBlkCopyChObj[0], .trpdMem = &gOspiUdmaBlkCopyCh0TrpdMem, .trpdMemSize = OSPI_UDMA_BLK_COPY_CH_TRPD_MEM_SIZE, .ringMem = &gOspiUdmaBlkCopyCh0RingMem, .ringMemSize = OSPI_UDMA_BLK_COPY_CH_RING_MEM_SIZE, .ringElemCount = OSPI_UDMA_BLK_COPY_CH_RING_ELEM_CNT, }; OSPI_DmaConfig gOspiDmaConfig[CONFIG_OSPI_NUM_DMA_INSTANCES] = { { .fxns = &gOspiDmaUdmaFxns, .ospiDmaArgs = (void *)&gOspiUdma0Args, } }; uint32_t gOspiDmaConfigNum = CONFIG_OSPI_NUM_DMA_INSTANCES; /* * GPIO */ /* * Board info */ /* This is based on DMSC board config and core */ #define BOARD_BUTTON_GPIO_INTR_NUM (CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_12) /*GPIO Interrupt Macros */ #define BOARD_BUTTON_GPIO_SWITCH_NUM (5) /** \brief bank interrupt source index base */ #define TISCI_BANK_SRC_IDX_BASE_GPIO0 (90U) #define TISCI_BANK_SRC_IDX_BASE_GPIO1 (90U) #define TISCI_BANK_SRC_IDX_BASE_MCU_GPIO0 (90U) static void Sciclient_gpioIrqSet(void); static void Sciclient_gpioIrqRelease(void); void Board_gpioInit(void) { Sciclient_gpioIrqSet(); } void Board_gpioDeinit(void) { Sciclient_gpioIrqRelease(); } uint32_t Board_getGpioButtonIntrNum(void) { return (BOARD_BUTTON_GPIO_INTR_NUM); } uint32_t Board_getGpioButtonSwitchNum(void) { return (BOARD_BUTTON_GPIO_SWITCH_NUM); } static void Sciclient_gpioIrqSet(void) { int32_t retVal; struct tisci_msg_rm_irq_set_req rmIrqReq; struct tisci_msg_rm_irq_set_resp rmIrqResp; rmIrqReq.valid_params = 0U; rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_ID_VALID; rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID; rmIrqReq.global_event = 0U; rmIrqReq.src_id = TISCI_DEV_GPIO1; rmIrqReq.src_index = TISCI_BANK_SRC_IDX_BASE_GPIO1 + GPIO_GET_BANK_INDEX(0); rmIrqReq.dst_id = TISCI_DEV_R5FSS1_CORE0; rmIrqReq.dst_host_irq = CSLR_R5FSS1_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_12; rmIrqReq.ia_id = 0U; rmIrqReq.vint = 0U; rmIrqReq.vint_status_bit_index = 0U; rmIrqReq.secondary_host = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST; retVal = Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SystemP_WAIT_FOREVER); if(0 != retVal) { DebugP_log("[Error] Sciclient event config failed!!!\r\n"); DebugP_assert(FALSE); } return; } static void Sciclient_gpioIrqRelease(void) { int32_t retVal; struct tisci_msg_rm_irq_release_req rmIrqReq; rmIrqReq.valid_params = 0U; rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_ID_VALID; rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID; rmIrqReq.global_event = 0U; rmIrqReq.src_id = TISCI_DEV_GPIO1; rmIrqReq.src_index = TISCI_BANK_SRC_IDX_BASE_GPIO1 + GPIO_GET_BANK_INDEX(0); rmIrqReq.dst_id = TISCI_DEV_R5FSS1_CORE0; rmIrqReq.dst_host_irq = CSLR_R5FSS1_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_12; rmIrqReq.ia_id = 0U; rmIrqReq.vint = 0U; rmIrqReq.vint_status_bit_index = 0U; rmIrqReq.secondary_host = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST; retVal = Sciclient_rmIrqRelease(&rmIrqReq, SystemP_WAIT_FOREVER); if(0 != retVal) { DebugP_log("[Error] Sciclient event reset failed!!!\r\n"); DebugP_assert(FALSE); } return; } /* * I2C */ /* I2C atrributes */ static I2C_HwAttrs gI2cHwAttrs[CONFIG_I2C_NUM_INSTANCES] = { { .baseAddr = CSL_I2C0_CFG_BASE, .intNum = 193, .eventId = 0, .funcClk = 96000000U, .enableIntr = 1, .ownSlaveAddr = { 0x1C, 0x1C, 0x1C, 0x1C, }, }, { .baseAddr = CSL_I2C1_CFG_BASE, .intNum = 194, .eventId = 0, .funcClk = 96000000U, .enableIntr = 1, .ownSlaveAddr = { 0x1C, 0x1C, 0x1C, 0x1C, }, }, }; /* I2C objects - initialized by the driver */ static I2C_Object gI2cObjects[CONFIG_I2C_NUM_INSTANCES]; /* I2C driver configuration */ I2C_Config gI2cConfig[CONFIG_I2C_NUM_INSTANCES] = { { .object = &gI2cObjects[CONFIG_I2C0], .hwAttrs = &gI2cHwAttrs[CONFIG_I2C0] }, { .object = &gI2cObjects[CONFIG_I2C1], .hwAttrs = &gI2cHwAttrs[CONFIG_I2C1] }, }; uint32_t gI2cConfigNum = CONFIG_I2C_NUM_INSTANCES; /* * IPC Notify */ #include <drivers/ipc_notify.h> #include <drivers/ipc_notify/v0/ipc_notify_v0.h> /* this function is called within IpcNotify_init, this function returns core specific IPC config */ void IpcNotify_getConfig(IpcNotify_InterruptConfig **interruptConfig, uint32_t *interruptConfigNum) { /* extern globals that are specific to this core */ extern IpcNotify_InterruptConfig gIpcNotifyInterruptConfig_r5fss1_0[]; extern uint32_t gIpcNotifyInterruptConfigNum_r5fss1_0; *interruptConfig = &gIpcNotifyInterruptConfig_r5fss1_0[0]; *interruptConfigNum = gIpcNotifyInterruptConfigNum_r5fss1_0; } /* * IPC RP Message */ #include <drivers/ipc_rpmsg.h> /* Number of CPUs that are enabled for IPC RPMessage */ #define IPC_RPMESSAGE_NUM_CORES (2U) /* Number of VRINGs for the numner of CPUs that are enabled for IPC */ #define IPC_RPMESSAGE_NUM_VRINGS (IPC_RPMESSAGE_NUM_CORES*(IPC_RPMESSAGE_NUM_CORES-1)) /* Number of a buffers in a VRING, i.e depth of VRING queue */ #define IPC_RPMESSAGE_NUM_VRING_BUF (12U) /* Max size of a buffer in a VRING */ #define IPC_RPMESSAGE_MAX_VRING_BUF_SIZE (256U) /* Size of each VRING is * number of buffers x ( size of each buffer + space for data structures of one buffer (32B) ) */ #define IPC_RPMESSAGE_VRING_SIZE RPMESSAGE_VRING_SIZE(IPC_RPMESSAGE_NUM_VRING_BUF, IPC_RPMESSAGE_MAX_VRING_BUF_SIZE) /* VRING base address, all VRINGs are put one after other in the below region. * * IMPORTANT: Make sure of below, * - The section defined below should be placed at the exact same location in memory for all the CPUs * - The memory should be marked as non-cached for all the CPUs * - The section should be marked as NOLOAD in all the CPUs linker command file */ /* In this case gRPMessageVringMem size is 6976 bytes */ uint8_t gRPMessageVringMem[IPC_RPMESSAGE_NUM_VRINGS][IPC_RPMESSAGE_VRING_SIZE] __attribute__((aligned(128), section(".bss.ipc_vring_mem"))); /* * MCSPI */ /* MCSPI atrributes */ static MCSPI_Attrs gMcspiAttrs[CONFIG_MCSPI_NUM_INSTANCES] = { { .baseAddr = CSL_MCSPI0_CFG_BASE, .inputClkFreq = 50000000U, .intrNum = 204, .operMode = MCSPI_OPER_MODE_INTERRUPT, .intrPriority = 4U, .chMode = MCSPI_CH_MODE_SINGLE, .pinMode = MCSPI_PINMODE_4PIN, .initDelay = MCSPI_INITDLY_0, }, { .baseAddr = CSL_MCSPI0_CFG_BASE, .inputClkFreq = 50000000U, .intrNum = 204, .operMode = MCSPI_OPER_MODE_INTERRUPT, .intrPriority = 4U, .chMode = MCSPI_CH_MODE_SINGLE, .pinMode = MCSPI_PINMODE_4PIN, .initDelay = MCSPI_INITDLY_0, }, }; /* MCSPI objects - initialized by the driver */ static MCSPI_Object gMcspiObjects[CONFIG_MCSPI_NUM_INSTANCES]; /* MCSPI driver configuration */ MCSPI_Config gMcspiConfig[CONFIG_MCSPI_NUM_INSTANCES] = { { &gMcspiAttrs[CONFIG_MCSPI0], &gMcspiObjects[CONFIG_MCSPI0], }, { &gMcspiAttrs[CONFIG_MCSPI1], &gMcspiObjects[CONFIG_MCSPI1], }, }; uint32_t gMcspiConfigNum = CONFIG_MCSPI_NUM_INSTANCES; #include <drivers/mcspi/v0/dma/mcspi_dma.h> MCSPI_DmaConfig gMcspiDmaConfig = { .fxns = NULL, .mcspiDmaArgs = (void *)NULL, }; uint32_t gMcspiDmaConfigNum = CONFIG_MCSPI_NUM_DMA_INSTANCES; /* * UART */ /* UART atrributes */ static UART_Attrs gUartAttrs[CONFIG_UART_NUM_INSTANCES] = { { .baseAddr = CSL_UART1_BASE, .inputClkFreq = 48000000U, }, }; /* UART objects - initialized by the driver */ static UART_Object gUartObjects[CONFIG_UART_NUM_INSTANCES]; /* UART driver configuration */ UART_Config gUartConfig[CONFIG_UART_NUM_INSTANCES] = { { &gUartAttrs[CONFIG_UART0], &gUartObjects[CONFIG_UART0], }, }; uint32_t gUartConfigNum = CONFIG_UART_NUM_INSTANCES; #include <drivers/uart/v0/dma/uart_dma.h> UART_DmaConfig gUartDmaConfig[CONFIG_UART_NUM_DMA_INSTANCES] = { }; uint32_t gUartDmaConfigNum = CONFIG_UART_NUM_DMA_INSTANCES; void Drivers_uartInit(void) { UART_init(); } /* * watchdog */ /* watchdog atrributes */ static Watchdog_HwAttrs gWatchdogHwAttrs[CONFIG_WATCHDOG_NUM_INSTANCES] = { { .instance = WATCHDOG_INST_ID_10, .baseAddr = CSL_RTI10_CFG_BASE, .wdtClkFrequency = 32552U, }, }; /* Watchdog objects - initialized by the driver */ Watchdog_MCB gWatchdogObjects[CONFIG_WATCHDOG_NUM_INSTANCES]; /* Watchdog driver configuration */ Watchdog_Config gWatchdogConfig[CONFIG_WATCHDOG_NUM_INSTANCES] = { { .object = &gWatchdogObjects[CONFIG_WDT10], .hwAttrs = &gWatchdogHwAttrs[CONFIG_WDT10] }, }; uint32_t gWatchdogConfigNum = CONFIG_WATCHDOG_NUM_INSTANCES; /* * UDMA */ /* UDMA driver instance object */ Udma_DrvObject gUdmaDrvObj[CONFIG_UDMA_NUM_INSTANCES]; /* UDMA driver instance init params */ static Udma_InitPrms gUdmaInitPrms[CONFIG_UDMA_NUM_INSTANCES] = { { .instId = UDMA_INST_ID_BCDMA_0, .skipGlobalEventReg = FALSE, .virtToPhyFxn = Udma_defaultVirtToPhyFxn, .phyToVirtFxn = Udma_defaultPhyToVirtFxn, }, }; void Pinmux_init(); void PowerClock_init(void); void PowerClock_deinit(void); /* * Common Functions */ void System_init(void) { /* DPL init sets up address transalation unit, on some CPUs this is needed * to access SCICLIENT services, hence this needs to happen first */ Dpl_init(); /* We should do sciclient init before we enable power and clock to the peripherals */ /* SCICLIENT init */ { int32_t retVal = SystemP_SUCCESS; retVal = Sciclient_init(CSL_CORE_ID_R5FSS1_0); DebugP_assertNoLog(SystemP_SUCCESS == retVal); } PowerClock_init(); /* Now we can do pinmux */ Pinmux_init(); /* finally we initialize all peripheral drivers */ OSPI_init(); I2C_init(); /* IPC Notify */ { IpcNotify_Params notifyParams; int32_t status; /* initialize parameters to default */ IpcNotify_Params_init(¬ifyParams); /* specify the core on which this API is called */ notifyParams.selfCoreId = CSL_CORE_ID_R5FSS1_0; /* list the cores that will do IPC Notify with this core * Make sure to NOT list 'self' core in the list below */ notifyParams.numCores = 2; notifyParams.coreIdList[0] = CSL_CORE_ID_R5FSS0_0; notifyParams.coreIdList[1] = CSL_CORE_ID_M4FSS0_0; /* initialize the IPC Notify module */ status = IpcNotify_init(¬ifyParams); DebugP_assert(status==SystemP_SUCCESS); } /* IPC RPMessage */ { RPMessage_Params rpmsgParams; int32_t status; /* initialize parameters to default */ RPMessage_Params_init(&rpmsgParams); /* VRING mapping from source core to destination core, '-1' means NO VRING, r5fss0_0 => {"r5fss0_0":-1,"r5fss1_0":0} r5fss1_0 => {"r5fss0_0":1,"r5fss1_0":-1} */ /* TX VRINGs */ rpmsgParams.vringTxBaseAddr[CSL_CORE_ID_R5FSS0_0] = (uintptr_t)gRPMessageVringMem[1]; /* RX VRINGs */ rpmsgParams.vringRxBaseAddr[CSL_CORE_ID_R5FSS0_0] = (uintptr_t)gRPMessageVringMem[0]; /* Other VRING properties */ rpmsgParams.vringSize = IPC_RPMESSAGE_VRING_SIZE; rpmsgParams.vringNumBuf = IPC_RPMESSAGE_NUM_VRING_BUF; rpmsgParams.vringMsgSize = IPC_RPMESSAGE_MAX_VRING_BUF_SIZE; /* initialize the IPC RP Message module */ status = RPMessage_init(&rpmsgParams); DebugP_assert(status==SystemP_SUCCESS); } MCSPI_init(); Drivers_uartInit(); Watchdog_init(); /* UDMA */ { uint32_t instId; int32_t retVal = UDMA_SOK; for(instId = 0U; instId < CONFIG_UDMA_NUM_INSTANCES; instId++) { retVal += Udma_init(&gUdmaDrvObj[instId], &gUdmaInitPrms[instId]); DebugP_assert(UDMA_SOK == retVal); } } } void System_deinit(void) { OSPI_deinit(); I2C_deinit(); RPMessage_deInit(); IpcNotify_deInit(); MCSPI_deinit(); UART_deinit(); Watchdog_deinit(); /* UDMA */ { uint32_t instId; int32_t retVal = UDMA_SOK; for(instId = 0U; instId < CONFIG_UDMA_NUM_INSTANCES; instId++) { retVal += Udma_deinit(&gUdmaDrvObj[instId]); DebugP_assert(UDMA_SOK == retVal); } } PowerClock_deinit(); /* SCICLIENT deinit */ { int32_t retVal = SystemP_SUCCESS; retVal = Sciclient_deinit(); DebugP_assertNoLog(SystemP_SUCCESS == retVal); } Dpl_deinit(); }
example.syscfg:
/** * These arguments were used when this file was generated. They will be automatically applied on subsequent loads * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss1-0" --product "MCU_PLUS_SDK_AM243x@08.04.00" * @versions {"tool":"1.14.0+2667"} */ /** * Import the modules used in this configuration. */ const flash = scripting.addModule("/board/flash/flash", {}, false); const flash1 = flash.addInstance(); const gpio = scripting.addModule("/drivers/gpio/gpio", {}, false); const gpio1 = gpio.addInstance(); const i2c = scripting.addModule("/drivers/i2c/i2c", {}, false); const i2c1 = i2c.addInstance(); const i2c2 = i2c.addInstance(); const ipc = scripting.addModule("/drivers/ipc/ipc"); const mcspi = scripting.addModule("/drivers/mcspi/mcspi", {}, false); const mcspi1 = mcspi.addInstance(); const mcspi2 = mcspi.addInstance(); const uart = scripting.addModule("/drivers/uart/uart", {}, false); const uart1 = uart.addInstance(); const watchdog = scripting.addModule("/drivers/watchdog/watchdog", {}, false); const watchdog1 = watchdog.addInstance(); const clock = scripting.addModule("/kernel/dpl/clock"); const debug_log = scripting.addModule("/kernel/dpl/debug_log"); const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); const mpu_armv71 = mpu_armv7.addInstance(); const mpu_armv72 = mpu_armv7.addInstance(); const mpu_armv73 = mpu_armv7.addInstance(); const mpu_armv74 = mpu_armv7.addInstance(); const mpu_armv75 = mpu_armv7.addInstance(); const mpu_armv76 = mpu_armv7.addInstance(); const mpu_armv77 = mpu_armv7.addInstance(); /** * Write custom configuration values to the imported modules. */ flash1.$name = "CONFIG_FLASH0"; flash1.peripheralDriver.$name = "CONFIG_OSPI0"; flash1.peripheralDriver.inputClkFreq = 200000000; flash1.peripheralDriver.dmaEnable = true; flash1.peripheralDriver.advanced = true; gpio1.$name = "GPIO_UPDATE_PS"; gpio1.trigType = "RISE_EDGE"; gpio1.advanced = true; gpio1.intrOut = "12"; gpio1.GPIO.$assign = "GPIO1"; gpio1.GPIO.gpioPin.$assign = "ball.Y1"; i2c1.$name = "CONFIG_I2C0"; i2c1.advanced = true; i2c1.I2C.$assign = "I2C0"; i2c1.I2C.SCL.$assign = "ball.A18"; i2c1.I2C.SDA.$assign = "ball.B18"; i2c2.$name = "CONFIG_I2C1"; i2c2.advanced = true; i2c2.I2C.$assign = "I2C1"; i2c2.I2C.SCL.$assign = "ball.C18"; i2c2.I2C.SDA.$assign = "ball.B19"; ipc.r5fss0_1 = "NONE"; ipc.r5fss1_1 = "NONE"; ipc.m4fss0_0 = "notify"; ipc.vringMsgSize = 256; ipc.vringNumBuf = 12; mcspi1.$name = "CONFIG_MCSPI0"; mcspi1.SPI.$assignAllowConflicts = "SPI0"; mcspi1.SPI.CLK.$assignAllowConflicts = "ball.D13"; mcspi1.SPI.D0.$assignAllowConflicts = "ball.A13"; mcspi1.SPI.D1.$assignAllowConflicts = "ball.A14"; mcspi1.mcspiChannel[0].$name = "CONFIG_MCSPI_CH0"; mcspi1.mcspiChannel[0].CSn.$assign = "ball.D12"; scripting.suppress("Resource conflict,SPI0 is also in use by @@@.+?@@@", mcspi1.SPI, "$assign"); scripting.suppress("Resource conflict,@@@.+?@@@ is also in use by @@@.+?@@@", mcspi1.SPI, "CLK"); scripting.suppress("Resource conflict,@@@.+?@@@ is also in use by @@@.+?@@@", mcspi1.SPI, "D0"); scripting.suppress("Resource conflict,@@@.+?@@@ is also in use by @@@.+?@@@", mcspi1.SPI, "D1"); mcspi2.$name = "CONFIG_MCSPI1"; mcspi2.SPI.$assignAllowConflicts = "SPI0"; mcspi2.SPI.CLK.$assignAllowConflicts = "ball.D13"; mcspi2.SPI.D0.$assignAllowConflicts = "ball.A13"; mcspi2.SPI.D1.$assignAllowConflicts = "ball.A14"; mcspi2.mcspiChannel[0].$name = "CONFIG_MCSPI_CH1"; mcspi2.mcspiChannel[0].CSn.$assign = "ball.C13"; scripting.suppress("Resource conflict,SPI0 is also in use by @@@.+?@@@", mcspi2.SPI, "$assign"); scripting.suppress("Resource conflict,@@@.+?@@@ is also in use by @@@.+?@@@", mcspi2.SPI, "CLK"); scripting.suppress("Resource conflict,@@@.+?@@@ is also in use by @@@.+?@@@", mcspi2.SPI, "D0"); scripting.suppress("Resource conflict,@@@.+?@@@ is also in use by @@@.+?@@@", mcspi2.SPI, "D1"); uart1.$name = "CONFIG_UART0"; uart1.rxTrigLvl = "1"; uart1.intrEnable = "USER_INTR"; uart1.txTrigLvl = "8"; uart1.UART.$assign = "USART1"; uart1.UART.RXD.$assign = "ball.E15"; uart1.UART.TXD.$assign = "ball.E14"; const udma = scripting.addModule("/drivers/udma/udma", {}, false); const udma1 = udma.addInstance({}, false); udma1.$name = "CONFIG_UDMA0"; flash1.peripheralDriver.udmaDriver = udma1; watchdog1.$name = "CONFIG_WDT10"; watchdog1.instance = "WDT10"; watchdog1.resetMode = "Watchdog_RESET_OFF"; debug_log.enableSharedMemLog = true; mpu_armv71.$name = "CONFIG_MPU_REGION0"; mpu_armv71.size = 31; mpu_armv71.attributes = "Device"; mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; mpu_armv71.allowExecute = false; mpu_armv72.size = 15; mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; mpu_armv72.$name = "CONFIG_MPU_ATCM"; mpu_armv73.baseAddr = 0x41010000; mpu_armv73.size = 15; mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; mpu_armv73.$name = "CONFIG_MPU_BTCM"; mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; mpu_armv74.baseAddr = 0x70000000; mpu_armv74.size = 21; mpu_armv74.$name = "CONFIG_MPU_MSRAM_ALL"; mpu_armv75.baseAddr = 0xC0000000; mpu_armv75.size = 30; mpu_armv75.$name = "CONFIG_MPU_DDR"; mpu_armv76.allowExecute = false; mpu_armv76.size = 17; mpu_armv76.attributes = "NonCached"; mpu_armv76.$name = "CONFIG_MPU_MSRAM_NOCACHE"; mpu_armv76.baseAddr = 0x70120000; mpu_armv77.baseAddr = 0x701D0000; mpu_armv77.size = 16; mpu_armv77.attributes = "Device"; mpu_armv77.allowExecute = false; mpu_armv77.$name = "CONFIG_MPU_MSRAM_SHARED"; /** * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to * re-solve from scratch. */ flash1.peripheralDriver.OSPI.$suggestSolution = "OSPI0"; flash1.peripheralDriver.OSPI.CLK.$suggestSolution = "ball.N20"; flash1.peripheralDriver.OSPI.CSn0.$suggestSolution = "ball.L19"; flash1.peripheralDriver.OSPI.DQS.$suggestSolution = "ball.N19"; flash1.peripheralDriver.OSPI.D7.$suggestSolution = "ball.M17"; flash1.peripheralDriver.OSPI.D6.$suggestSolution = "ball.N18"; flash1.peripheralDriver.OSPI.D5.$suggestSolution = "ball.P20"; flash1.peripheralDriver.OSPI.D4.$suggestSolution = "ball.P21"; flash1.peripheralDriver.OSPI.D3.$suggestSolution = "ball.M21"; flash1.peripheralDriver.OSPI.D2.$suggestSolution = "ball.M20"; flash1.peripheralDriver.OSPI.D1.$suggestSolution = "ball.M18"; flash1.peripheralDriver.OSPI.D0.$suggestSolution = "ball.M19";
According to the related support request, I need to modify <SDK>\source\drivers\sciclient\sciclient_default_boardcfg\am64x_am243x\sciclient_defaultBoardcfg_rm.c to complete the plumbing from interrupt source to requested core (R5FSS1_CORE0). How do I modify that file to connect GPIO1_0 to R5FSS1_CORE0? Is there a document that describes this process (other than the 'Modifying resource allocation' section of the AM243x MCU+ SDK documentation)? The associated support request isn't very clear as to how to do this and it isn't clear to me in reading either the associated support ticket or SDK documentation what 'start resource' and 'num_resource' are referring to in terms of 'type of resource' being configured.
It's very confusing.
Any help would be greatly appreciated.
Thanks.