This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
TRM shows following picture, however using GPIO32 with CLB5.0 output i seem to observe CLB output regardless of the state of GPyDIR bit.
GPIO output changes when change GPBGMUX1 & GPBMUX1, so clb-output-xbar is going to the multiplexor but tir-state buffer shown seem to be ignored.
In additon i seem be to unable to route TILE output CLB5.0 to any other GPIO, for example gpio 41 is not producing output (stays zero) that i observe when i route to GPIO32 but does react to XBAR_invertOutputSignal(...) quite puzzling....
Hi Alexy,
When you configure GPIO32 to be an input, is the standard GPIO settings selected in the mux options?
Could you share the code you are writing to send the CLB output to GPIO41?
Thank you,
Luke
Hello Luke, I was just changing GPBDIR register, i suspect that extra line that goes from the mux to GPBDIR overrides my settings ? Does not look like i can attach sysconfig to this message, but i'll try to post it as a code - it contains full configuration that i was trying to make to work.
/** * 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 --board "/boards/LAUNCHXL_F28P65X" --context "CPU1" --product "C2000WARE@5.01.00.00" * @versions {"tool":"1.19.0+3426"} */ /** * Import the modules used in this configuration. */ const adc = scripting.addModule("/driverlib/adc.js", {}, false); const adc1 = adc.addInstance(); const adc2 = adc.addInstance(); const adc3 = adc.addInstance(); const analog = scripting.addModule("/driverlib/analog.js", {}, false); const analog1 = analog.addInstance(); const asysctl = scripting.addModule("/driverlib/asysctl.js"); const led = scripting.addModule("/driverlib/board_components/led", {}, false); const led1 = led.addInstance(); const clb = scripting.addModule("/driverlib/clb.js", {}, false); const clb1 = clb.addInstance(); const clb_outputxbar = scripting.addModule("/driverlib/clb_outputxbar.js", {}, false); const clb_outputxbar1 = clb_outputxbar.addInstance(); const clb_outputxbar2 = clb_outputxbar.addInstance(); const clb_outputxbar3 = clb_outputxbar.addInstance(); const dac = scripting.addModule("/driverlib/dac.js", {}, false); const dac1 = dac.addInstance(); const device_support = scripting.addModule("/driverlib/device_support.js"); const epwm = scripting.addModule("/driverlib/epwm.js", {}, false); const epwm1 = epwm.addInstance(); const epwm2 = epwm.addInstance(); const epwm3 = epwm.addInstance(); const epwmxbar = scripting.addModule("/driverlib/epwmxbar.js", {}, false); const epwmxbar1 = epwmxbar.addInstance(); const gpio = scripting.addModule("/driverlib/gpio.js", {}, false); const gpio2 = gpio.addInstance(); const gpio3 = gpio.addInstance(); const spi = scripting.addModule("/driverlib/spi.js", {}, false); const spi1 = spi.addInstance(); const sync = scripting.addModule("/driverlib/sync.js"); const TILE = scripting.addModule("/utilities/clb_tool/clb_syscfg/source/TILE", {}, false); const TILE1 = TILE.addInstance(); /** * Write custom configuration values to the imported modules. */ adc1.$name = "ADC_iSEN_A"; adc1.adcClockPrescaler = "ADC_CLK_DIV_4_0"; adc1.adcBase = "ADCB_BASE"; adc1.enabledSOCs = ["ADC_SOC_NUMBER0"]; adc1.soc0Channel = "ADC_CH_ADCIN7"; adc1.soc0Name = "SOC_ISEN_A"; adc1.soc0SampleWindow = 15; adc1.enabledInts = ["ADC_INT_NUMBER1"]; adc1.enableInterrupt1 = true; adc1.registerInterrupts = ["1"]; adc1.soc0Trigger = "ADC_TRIGGER_EPWM5_SOCA"; adc1.adcInt1.enableInterrupt = true; adc2.$name = "ADC_ISEN_B"; adc2.socHighPriorityMode = "ADC_PRI_SOC0_HIPRI"; adc2.enabledSOCs = ["ADC_SOC_NUMBER0"]; adc2.soc0Channel = "ADC_CH_ADCIN7"; adc2.soc0SampleWindow = 15; adc2.adcClockPrescaler = "ADC_CLK_DIV_4_0"; adc2.soc0Trigger = "ADC_TRIGGER_EPWM5_SOCA"; adc3.$name = "ADC_ISEN_C"; adc3.adcBase = "ADCC_BASE"; adc3.adcClockPrescaler = "ADC_CLK_DIV_4_0"; adc3.enabledSOCs = ["ADC_SOC_NUMBER0"]; adc3.soc0IndependentNameMode = true; adc3.soc0Channel = "ADC_CH_ADCIN4"; adc3.soc0SampleWindow = 15; adc3.interruptPulseMode = "ADC_PULSE_END_OF_CONV"; adc3.registerInterrupts = ["1"]; adc3.useInterrupts = false; adc3.soc0Trigger = "ADC_TRIGGER_EPWM5_SOCA"; asysctl.analogReference = "INTERNAL"; asysctl.analogReferenceVoltage = "1P65"; led1.$name = "myBoardLED0"; led1.gpio.$hardware = system.deviceData.board.components.LED4; clb1.$name = "myCLB0"; clb1.enableCLB = true; clb1.localConfigCLB_IN0 = "CLB_LOCAL_IN_MUX_INPUT1"; clb1.attachTile = true; clb1.initTile = true; clb1.globalConfigCLB_IN0 = "CLB_GLOBAL_IN_MUX_EPWM5A"; clb1.synchronizeCLB_IN0 = true; clb1.inputTypeCLB_IN1 = "GLOBAL"; clb1.inputsUsed = ["CLB_IN0"]; clb1.inputTypeCLB_IN0 = "GLOBAL"; clb1.clbBase = "CLB5_BASE"; clb_outputxbar1.$name = "myCLB_OUTPUTXBAR0"; clb_outputxbar1.mux5Config = "XBAR_OUT_MUX05_CLB5_OUT5"; clb_outputxbar1.useSourceSelect = true; clb_outputxbar1.sourceSignals = ["CLB5_OUT0","CLB5_OUT7"]; clb_outputxbar1.clb_outputxbar.$assign = "CLB_OUTPUTXBAR7"; clb_outputxbar1.clb_outputxbar.clb_outputxbarPin.$assign = "boosterpack2.53"; clb_outputxbar2.$name = "myCLB_OUTPUTXBAR1"; clb_outputxbar2.useSourceSelect = true; clb_outputxbar2.sourceSignals = ["CLB5_OUT0"]; clb_outputxbar2.clb_outputxbar.$assign = "CLB_OUTPUTXBAR1"; clb_outputxbar2.clb_outputxbar.clb_outputxbarPin.$assign = "boosterpack2.74"; clb_outputxbar3.$name = "myCLB_OUTPUTXBAR2"; clb_outputxbar3.mux8Config = "XBAR_OUT_MUX08_XTRIP_OUT3"; clb_outputxbar3.mux9Config = "XBAR_OUT_MUX09_XTRIP_OUT4"; clb_outputxbar3.mux10Config = "XBAR_OUT_MUX10_CLB6_OUT2"; clb_outputxbar3.mux11Config = "XBAR_OUT_MUX11_CLB6_OUT3"; clb_outputxbar3.mux12Config = "XBAR_OUT_MUX12_CLB6_OUT4"; clb_outputxbar3.mux13Config = "XBAR_OUT_MUX13_CLB6_OUT5"; clb_outputxbar3.mux14Config = "XBAR_OUT_MUX14_CLB6_OUT6"; clb_outputxbar3.mux15Config = "XBAR_OUT_MUX15_CLB6_OUT7"; clb_outputxbar3.mux16Config = "XBAR_OUT_MUX16_XTRIP_OUT5"; clb_outputxbar3.mux17Config = "XBAR_OUT_MUX17_XTRIP_OUT6"; clb_outputxbar3.mux24Config = "XBAR_OUT_MUX24_XTRIP_OUT7"; clb_outputxbar3.mux25Config = "XBAR_OUT_MUX25_XTRIP_OUT8"; clb_outputxbar3.mux30Config = "XBAR_OUT_MUX30_EPG1_OUT2"; clb_outputxbar3.mux31Config = "XBAR_OUT_MUX31_EPG1_OUT3"; clb_outputxbar3.mux1Config = "XBAR_OUT_MUX01_CLB5_OUT1"; clb_outputxbar3.mux2Config = "XBAR_OUT_MUX02_CLB5_OUT2"; clb_outputxbar3.mux3Config = "XBAR_OUT_MUX03_CLB5_OUT3"; clb_outputxbar3.mux4Config = "XBAR_OUT_MUX04_CLB5_OUT4"; clb_outputxbar3.mux5Config = "XBAR_OUT_MUX05_CLB5_OUT5"; clb_outputxbar3.mux6Config = "XBAR_OUT_MUX06_CLB5_OUT6"; clb_outputxbar3.mux7Config = "XBAR_OUT_MUX07_CLB5_OUT7"; clb_outputxbar3.sourceSignals = ["CLB5_OUT0"]; clb_outputxbar3.useSourceSelect = true; clb_outputxbar3.clb_outputxbar.$assign = "CLB_OUTPUTXBAR2"; const divider4 = system.clockTree["CLBCLKDIV"]; divider4.divideValue = 2; dac1.$name = "myDACA"; dac1.enableOutput = true; dac1.referenceVoltage = "DAC_REF_ADC_VREFHI"; dac1.gainMode = "DAC_GAIN_TWO"; analog1.$name = "myANALOGPinMux0"; dac1.analog = analog1; analog1.useCase = "CUSTOM"; adc1.analog = analog1; analog1.useInterfacePins = ["A0/DACA_OUT","A7, GPIO210","B6, GPIO207","B7, GPIO208","C4, GPIO205"]; adc2.analog = analog1; adc3.analog = analog1; device_support.build = "Release"; epwm1.epwmTimebase_hsClockDiv = "EPWM_HSCLOCK_DIVIDER_1"; epwm1.epwmTimebase_counterMode = "EPWM_COUNTER_MODE_UP_DOWN"; epwm1.epwmCounterCompare_cmpA = 500; epwm1.epwmDigitalCompare_EPWM_DC_TYPE_DCAH = "EPWM_DC_TRIP_TRIPIN4"; epwm1.epwmDigitalCompare_EPWM_TZ_DC_OUTPUT_A1 = "EPWM_TZ_EVENT_DCXH_HIGH"; epwm1.epwmTripZone_EPWM_TZ_ACTION_EVENT_TZA = "EPWM_TZ_ACTION_LOW"; epwm1.epwmTripZone_oneShotSource = ["EPWM_TZ_SIGNAL_DCAEVT1"]; epwm1.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true; epwm1.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar = "1"; epwm1.epwmTimebase_counterModeAfterSync = "EPWM_COUNT_MODE_UP_AFTER_SYNC"; epwm1.epwmTimebase_syncInPulseSource = "EPWM_SYNC_IN_PULSE_SRC_DISABLE"; epwm1.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA = "EPWM_AQ_OUTPUT_LOW"; epwm1.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_HIGH"; epwm1.epwmDeadband_enableRED = true; epwm1.epwmDeadband_enableFED = true; epwm1.epwmDeadband_polarityFED = "EPWM_DB_POLARITY_ACTIVE_LOW"; epwm1.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.PWM_LOC1; epwm1.$name = "pwm1A"; epwm1.epwmTimebase_period = 2000; epwm1.epwmTimebase_syncOutPulseMode = ["EPWM_SYNC_OUT_PULSE_ON_SOFTWARE"]; epwm1.epwmTimebase_forceSyncPulse = true; epwm1.hrpwm_syncSource = "HRPWM_PWMSYNC_SOURCE_ZERO"; epwm1.epwmTimebase_phaseEnable = true; epwm1.epwmTimebase_phaseShift = 500; epwm1.epwmDeadband_delayRED = 40; epwm1.epwmDeadband_delayFED = 40; epwm1.epwmEventTrigger_EPWM_SOC_A_triggerSource = "EPWM_SOC_TBCTR_PERIOD"; epwm2.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.PWM_LOC2; epwm2.$name = "pwm1B"; epwm2.copyUse = true; epwm2.copyFrom = "pwm1A"; epwm2.epwmTimebase_hsClockDiv = "EPWM_HSCLOCK_DIVIDER_1"; epwm2.epwmTimebase_period = 2000; epwm2.epwmTimebase_counterMode = "EPWM_COUNTER_MODE_UP_DOWN"; epwm2.epwmTimebase_counterModeAfterSync = "EPWM_COUNT_MODE_UP_AFTER_SYNC"; epwm2.epwmTimebase_syncOutPulseMode = ["EPWM_SYNC_OUT_PULSE_ON_SOFTWARE"]; epwm2.epwmCounterCompare_cmpA = 500; epwm2.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA = "EPWM_AQ_OUTPUT_LOW"; epwm2.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_HIGH"; epwm2.epwmDeadband_polarityFED = "EPWM_DB_POLARITY_ACTIVE_LOW"; epwm2.epwmDeadband_enableRED = true; epwm2.epwmDeadband_delayRED = 40; epwm2.epwmDeadband_enableFED = true; epwm2.epwmDeadband_delayFED = 40; epwm2.epwmTripZone_EPWM_TZ_ACTION_EVENT_TZA = "EPWM_TZ_ACTION_LOW"; epwm2.epwmTripZone_oneShotSource = ["EPWM_TZ_SIGNAL_DCAEVT1"]; epwm2.epwmDigitalCompare_EPWM_DC_TYPE_DCAH = "EPWM_DC_TRIP_TRIPIN4"; epwm2.epwmDigitalCompare_EPWM_TZ_DC_OUTPUT_A1 = "EPWM_TZ_EVENT_DCXH_HIGH"; epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true; epwm2.epwmEventTrigger_EPWM_SOC_A_triggerSource = "EPWM_SOC_TBCTR_U_CMPA"; epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar = "1"; epwm2.epwmTimebase_syncInPulseSource = "EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM5"; epwm2.epwmTimebase_periodLink = "EPWM_LINK_WITH_EPWM_5"; epwm2.epwmTimebase_phaseEnable = true; epwm2.epwmTimebase_phaseShift = 500; epwm3.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.PWM_LOC3; epwm3.$name = "pwm1C"; epwm3.copyUse = true; epwm3.copyFrom = "pwm1B"; epwm3.epwmTimebase_hsClockDiv = "EPWM_HSCLOCK_DIVIDER_1"; epwm3.epwmTimebase_period = 2000; epwm3.epwmTimebase_counterMode = "EPWM_COUNTER_MODE_UP_DOWN"; epwm3.epwmTimebase_counterModeAfterSync = "EPWM_COUNT_MODE_UP_AFTER_SYNC"; epwm3.epwmTimebase_syncInPulseSource = "EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM5"; epwm3.epwmTimebase_syncOutPulseMode = ["EPWM_SYNC_OUT_PULSE_ON_SOFTWARE"]; epwm3.epwmCounterCompare_cmpA = 500; epwm3.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA = "EPWM_AQ_OUTPUT_LOW"; epwm3.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_HIGH"; epwm3.epwmDeadband_polarityFED = "EPWM_DB_POLARITY_ACTIVE_LOW"; epwm3.epwmDeadband_enableRED = true; epwm3.epwmDeadband_delayRED = 40; epwm3.epwmDeadband_enableFED = true; epwm3.epwmDeadband_delayFED = 40; epwm3.epwmTripZone_EPWM_TZ_ACTION_EVENT_TZA = "EPWM_TZ_ACTION_LOW"; epwm3.epwmTripZone_oneShotSource = ["EPWM_TZ_SIGNAL_DCAEVT1"]; epwm3.epwmDigitalCompare_EPWM_DC_TYPE_DCAH = "EPWM_DC_TRIP_TRIPIN4"; epwm3.epwmDigitalCompare_EPWM_TZ_DC_OUTPUT_A1 = "EPWM_TZ_EVENT_DCXH_HIGH"; epwm3.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true; epwm3.epwmEventTrigger_EPWM_SOC_A_triggerSource = "EPWM_SOC_TBCTR_U_CMPA"; epwm3.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar = "1"; epwm3.epwmTimebase_periodLink = "EPWM_LINK_WITH_EPWM_5"; epwm3.epwmTimebase_phaseEnable = true; epwm3.epwmTimebase_phaseShift = 500; epwmxbar1.$name = "myEPWMXBAR4"; epwmxbar1.muxesUsed = ["XBAR_MUX02"]; epwmxbar1.tripInput = "XBAR_TRIP4"; gpio2.$name = "spi1CS"; gpio2.direction = "GPIO_DIR_MODE_OUT"; gpio2.writeInitialValue = true; gpio2.initialValue = 1; gpio2.gpioPin.$assign = "boosterpack1.12"; scripting.suppress("Connected to hardware,@@@.+?@@@ is connected to EQEP1 Header on the LaunchPad F28P65X\\. Consider selecting it in 'use hardware' above\\. @@@.+?@@@", gpio2, "gpioPin"); gpio3.$name = "GPIO_drv1_enable"; gpio3.writeInitialValue = true; gpio3.direction = "GPIO_DIR_MODE_OUT"; gpio3.gpioPin.$assign = "boosterpack1.4"; scripting.suppress("Connected to hardware,@@@.+?@@@ is connected to SCIA XDS on the LaunchPad F28P65X\\. Consider selecting it in 'use hardware' above\\. @@@.+?@@@", gpio3, "gpioPin"); spi1.$name = "drvSPI0"; spi1.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.SPI; spi1.bitRate = 400000; spi1.mode = "SPI_MODE_CONTROLLER"; spi1.spi.$assign = "SPIA"; spi1.spi.spi_picoPin.$assign = "boosterpack1.15"; spi1.spi.spi_pociPin.$assign = "boosterpack1.14"; spi1.spi.spi_clkPin.$assign = "boosterpack1.7"; sync.syncOutSource = "SYSCTL_SYNC_OUT_SRC_EPWM5SYNCOUT"; clb1.tile = TILE1; TILE1.$name = "TILE0_design"; TILE1.pipeline_mode = true; TILE1.tileLock = true; TILE1.BOUNDARY.$name = "BOUNDARY0"; TILE1.LUT_0.$name = "LUT_0"; TILE1.LUT_1.$name = "LUT_1"; TILE1.LUT_2.$name = "LUT_2"; TILE1.FSM_0.$name = "FSM_0"; TILE1.FSM_1.$name = "FSM_1"; TILE1.FSM_2.$name = "FSM_2"; TILE1.COUNTER_0.$name = "COUNTER_0"; TILE1.COUNTER_1.$name = "COUNTER_1"; TILE1.COUNTER_2.$name = "COUNTER_2"; TILE1.OUTLUT_0.$name = "OUTLUT_0"; TILE1.OUTLUT_0.i0 = "BOUNDARY.in0"; TILE1.OUTLUT_0.eqn = "i0"; TILE1.OUTLUT_1.$name = "OUTLUT_1"; TILE1.OUTLUT_1.eqn = "!i0"; TILE1.OUTLUT_1.i0 = "BOUNDARY.in0"; TILE1.OUTLUT_2.$name = "OUTLUT_2"; TILE1.OUTLUT_3.$name = "OUTLUT_3"; TILE1.OUTLUT_4.$name = "OUTLUT_4"; TILE1.OUTLUT_5.$name = "OUTLUT_5"; TILE1.OUTLUT_6.$name = "OUTLUT_6"; TILE1.OUTLUT_7.$name = "OUTLUT_7"; TILE1.OUTLUT_7.eqn = "i0"; TILE1.OUTLUT_7.i0 = "BOUNDARY.in0"; TILE1.HLC.$name = "HLC_0"; TILE1.HLC.program0.$name = "HLCP_0"; TILE1.HLC.program1.$name = "HLCP_1"; TILE1.HLC.program2.$name = "HLCP_2"; TILE1.HLC.program3.$name = "HLCP_3"; TILE1.AOC_0.$name = "AOC_0"; TILE1.AOC_1.$name = "AOC_1"; TILE1.AOC_2.$name = "AOC_2"; TILE1.AOC_3.$name = "AOC_3"; TILE1.AOC_4.$name = "AOC_4"; TILE1.AOC_5.$name = "AOC_5"; TILE1.AOC_6.$name = "AOC_6"; TILE1.AOC_7.$name = "AOC_7"; /** * 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. */ led1.gpio.gpioPin.$suggestSolution = "boosterpack1.13"; clb_outputxbar3.clb_outputxbar.clb_outputxbarPin.$suggestSolution = "boosterpack2.73"; analog1.analog.$suggestSolution = "ANALOG"; analog1.analog["a0/daca_outPin"].$suggestSolution = "boosterpack1.30"; analog1.analog["a7, gpio210Pin"].$suggestSolution = "boosterpack1.27"; analog1.analog["b6, gpio207Pin"].$suggestSolution = "boosterpack2.68"; analog1.analog["b7, gpio208Pin"].$suggestSolution = "boosterpack1.28"; analog1.analog["c4, gpio205Pin"].$suggestSolution = "boosterpack1.26"; epwm1.epwm.$suggestSolution = "EPWM5"; epwm1.epwm.epwm_aPin.$suggestSolution = "boosterpack1.40"; epwm1.epwm.epwm_bPin.$suggestSolution = "boosterpack1.39"; epwm2.epwm.$suggestSolution = "EPWM4"; epwm2.epwm.epwm_aPin.$suggestSolution = "boosterpack1.38"; epwm2.epwm.epwm_bPin.$suggestSolution = "boosterpack1.37"; epwm3.epwm.$suggestSolution = "EPWM6"; epwm3.epwm.epwm_aPin.$suggestSolution = "boosterpack1.36"; epwm3.epwm.epwm_bPin.$suggestSolution = "boosterpack1.35"; spi1.spi.spi_ptePin.$suggestSolution = "boosterpack1.19";
Hi Alexy,
Your SysConfig configuration looks OK. Is the pull-up enabled when you change this GPIO to an input? If not, could you try enabling the pull-up to see if this issue persists?
Why are you configuring the GPIO as an input if the mux selection is CLB Output XBAR?
Thank you,
Luke
I was not configuring GPIO as input i was trying to Tri-State output.Was just trying to bound the problem and to understand GPIO diagram, since i failed to route the same CLB output to GPIO41, not matter what settings i put into GPIO control registers. My experiments showed VERY different behavior between GPIO32 and GPIO41, so something fundamental is either missing from the documentation or it's not very obvious. Thank you.
Hi Alexey,
Understood. I will test this issue on a F28P65x launchpad on my side. I should get back to you tomorrow.
Thank you,
Luke
Hi Alexey,
I was able to replicate this issue on my side. While I was not able to send a CLB output to GPIO41, I was able to write to GPIO41 directly. I'll reach out to the design team to determine whether CLBOUTPUTXBAR2 is connected to GPIO41.
Thank you,
Luke
Hi Alexey,
The design team confirmed that CLBOUTPUTXBAR2 is connected to GPIO41, however we realized that CLBOUTPUTXBAR2 is not connected to GPIO32, it is actually connected to GPIO33. CLBOUTPUTXBAR1 is connected to GPIO32. Just an FYI in case you were not aware of this already.
I believe this is an issue in driverlib. When the XBAR_setOutputMuxConfig function is called, it takes in in XBAR_OutputNum struct as an input parameter. This struct is essentially an offset address to determine the register that gets written to, where CLBOUTPUTXBAR1MUX0TO15 has the same address as the base address for all CLBOUTPUTXBAR registers:
The offset addresses should all be a multiple of two since there are two registers per CLBOUTPUXBAR instance. This function is shared between the CLB OUTPUTXBAR and OUTPUTXBAR modules.
On F28P65x however, we updated the OUTPUTXBAR module to have 64 input muxes and 4 registers per OUTPUTXBAR instance, resulting in an update to the XBAR_setOutputMuxConfig function. However, the format of CLBOUTPUTXBAR remained the same(2 registers per CLBOUTPUTXBAR instance). So if you try to call this function(which SysConfig does) for CLBOUTPUTXBAR and use any CLBOUTPUTXBAR instance besides CLBOUTPUTXBAR1, the offset address used will be double what it should be. When you attempted to configure CLBOUTPUTXBAR2 via SysConfig, you were actually configuring CLBOUTPUTXBAR3 from a register perspective. This issue does not occur on CLBOUTPUTXBAR1 since the offset address is 0, so doubling the offset address will have no effect.
I will work with the software team to have this fixed and included in our next C2000Ware release on April 5th. If you need to have this updated sooner, I can help you correct this on your side locally. Apologies for the inconvenience.
Thank you,
Luke
Hello Luke, thank you for investigating it, it makes sense now. Short term i can just call driverlib with xbar offset divided by two, and it seems to be working:
XBAR_setOutputMuxConfig1(CLBOUTPUTXBAR_BASE, myCLB_OUTPUTXBAR1/2, XBAR_OUT_MUX00_CLB5_OUT0);
Hi Alexey,
Glad to hear this workaround resolved the issue. Let me know if you have any additional questions.
--Luke